Skip to content

Commit a80304e

Browse files
committed
Fix nbd device parsing, for reals
1 parent f96f7fc commit a80304e

1 file changed

Lines changed: 16 additions & 6 deletions

File tree

nbd-client.c

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,14 @@ static void netlink_disconnect(char *nbddev) {
225225
struct nl_msg *msg;
226226
int driver_id;
227227
int ret;
228+
char *local_dev = nbddev;
228229

229230
int index = -1;
230231
if (nbddev) {
231-
if (sscanf(nbddev, "nbd%d", &index) != 1)
232+
if (!strncmp(local_dev, "/dev/", 5)) {
233+
local_dev += 5;
234+
}
235+
if (sscanf(local_dev, "nbd%d", &index) != 1)
232236
err("Invalid nbd device target\n");
233237
}
234238
if (index < 0)
@@ -313,13 +317,15 @@ static int netlink_check_conn(char* devname, int do_print) {
313317
struct nl_msg *msg;
314318
int driver_id, ret;
315319
int index = -1;
320+
char *local_dev = devname;
316321
int connected = -1; /* -1 = unknown, 0 = connected, 1 = disconnected */
317322

318323
/* Parse device index from name */
319-
if (sscanf(devname, "/dev/nbd%d", &index) != 1) {
320-
if (sscanf(devname, "nbd%d", &index) != 1) {
321-
return 2; /* Invalid device name */
322-
}
324+
if (!strncmp(local_dev, "/dev/", 5)) {
325+
local_dev += 5;
326+
}
327+
if (sscanf(local_dev, "nbd%d", &index) != 1) {
328+
return 2; /* Invalid device name */
323329
}
324330

325331
/* Setup netlink socket */
@@ -1539,7 +1545,11 @@ int main(int argc, char *argv[]) {
15391545
if (netlink) {
15401546
int index = -1;
15411547
if (cur_client->dev) {
1542-
if (sscanf(cur_client->dev, "nbd%d", &index) != 1)
1548+
char *local_dev = cur_client->dev;
1549+
if(!strncmp(local_dev, "/dev/", 5)) {
1550+
local_dev += 5;
1551+
}
1552+
if (sscanf(local_dev, "nbd%d", &index) != 1)
15431553
err("Invalid nbd device target\n");
15441554
}
15451555
netlink_configure(index, sockfds, flags, identifier);

0 commit comments

Comments
 (0)