From 9f44cf71df7d7ebb60a3939efe0faf1dd288c3a0 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Thu, 20 Feb 2025 01:33:11 +0300 Subject: [PATCH] Fix device name/number validation in vitastor-nbd --- src/client/nbd_proxy.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/client/nbd_proxy.cpp b/src/client/nbd_proxy.cpp index 4a3bbf12..e88b3e55 100644 --- a/src/client/nbd_proxy.cpp +++ b/src/client/nbd_proxy.cpp @@ -381,8 +381,9 @@ public: } else if (pos == 1) { + char c = 0; int n = 0; - if (sscanf(args[i], "/dev/nbd%d", &n) > 0) + if (sscanf(args[i], "/dev/nbd%d%c", &n, &c) == 1) cfg["dev_num"] = n; else cfg["dev_num"] = args[i]; @@ -404,18 +405,14 @@ public: } else if (cfg["command"] == "unmap") { - if (cfg["dev_num"].is_null()) + if (!cfg["dev_num"].is_number() && + cfg["dev_num"].string_value() != "0" && + !cfg["dev_num"].uint64_value()) { fprintf(stderr, "device name or number is missing\n"); exit(1); } - if (cfg["netlink"].is_null()) - { - ioctl_unmap(cfg["dev_num"].uint64_value()); - } - else - { - } + ioctl_unmap(cfg["dev_num"].uint64_value()); } #ifdef HAVE_NBD_NETLINK_H else if (cfg["command"] == "netlink-map")