drbd: fix for truncated minor number in callback command line
authorLars Ellenberg <lars.ellenberg@linbit.com>
Mon, 13 Jun 2016 22:26:18 +0000 (00:26 +0200)
committerJens Axboe <axboe@fb.com>
Tue, 14 Jun 2016 03:43:04 +0000 (21:43 -0600)
The command line parameter the kernel module uses to communicate the
device minor to userland helper is flawed in a way that the device
indentifier "minor-%d" is being truncated to minors with a maximum
of 5 digits.

But DRBD 8.4 allows 2^20 == 1048576 minors,
thus a minimum of 7 digits must be supported.

Reported by Veit Wahlich on drbd-dev.

Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/block/drbd/drbd_nl.c

index 99339dfe4389500c1b5949e5cab19aeac207fcae..3643f9ca5a386504569f028237064d93ac0b8314 100644 (file)
@@ -343,7 +343,7 @@ int drbd_khelper(struct drbd_device *device, char *cmd)
                         (char[20]) { }, /* address family */
                         (char[60]) { }, /* address */
                        NULL };
-       char mb[12];
+       char mb[14];
        char *argv[] = {usermode_helper, cmd, mb, NULL };
        struct drbd_connection *connection = first_peer_device(device)->connection;
        struct sib_info sib;
@@ -352,7 +352,7 @@ int drbd_khelper(struct drbd_device *device, char *cmd)
        if (current == connection->worker.task)
                set_bit(CALLBACK_PENDING, &connection->flags);
 
-       snprintf(mb, 12, "minor-%d", device_to_minor(device));
+       snprintf(mb, 14, "minor-%d", device_to_minor(device));
        setup_khelper_env(connection, envp);
 
        /* The helper may take some time.