@samitouri / QOSamiQemu / commits / 36212b4e85

hw/arm/xilinx_zynq: Use strcasecmp to parse boot-mode option values

In zynq_set_boot_mode() where we parse the string the user has set the boot-mode option to, we use strncasecmp(str, "qspi", 4) and so on. This is wrong, because it means that we will ignore any trailing junk on the end of the option string, and handle -machine boot-mode=sdXYZZY the same as -machine boot-mode=sd In the documentation we say: Supported values are ``jtag``, ``sd``, ``qspi`` and ``nor``. and that's obviously what we meant to implement. The correct tool for this job is a simple strcasecmp operation. Switch to that. We use the g_ascii_strcasecmp() rather than plain strcasecmp() because we're comparing ASCII strings here and don't want the potentially locale-specific behaviour that strcasecmp() implies (and we're trying to standardize on the glib function for this kind of string comparison). Fixes: 7df3747c92d13 ("hw/arm/xilinx_zynq: Add boot-mode property") Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Kostiantyn Kostiuk <kkostiuk@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Message-id: 20260327145012.907264-1-peter.maydell@linaro.org

Peter Maydell committed Mar 30, 2026 at 16:18 UTC 36212b4e859d1ccb25ab37deac152d67421ac425
1 file changed +4 -4
hw/arm/xilinx_zynq.c
+4 -4
@@ -186,13 +186,13 @@ static void zynq_set_boot_mode(Object *obj, const char *str,
186 ZynqMachineState *m = ZYNQ_MACHINE(obj);
187 uint8_t mode = 0;
188
189 - if (!strncasecmp(str, "qspi", 4)) {
189 + if (!g_ascii_strcasecmp(str, "qspi")) {
190 mode = 1;
191 - } else if (!strncasecmp(str, "sd", 2)) {
191 + } else if (!g_ascii_strcasecmp(str, "sd")) {
192 mode = 5;
193 - } else if (!strncasecmp(str, "nor", 3)) {
193 + } else if (!g_ascii_strcasecmp(str, "nor")) {
194 mode = 2;
195 - } else if (!strncasecmp(str, "jtag", 4)) {
195 + } else if (!g_ascii_strcasecmp(str, "jtag")) {
196 mode = 0;
197 } else {
198 error_setg(errp, "%s boot mode not supported", str);