OSDN Git Service

block: Replace all non-returning strlcpy with strscpy
authorAzeem Shaikh <azeemshaikh38@gmail.com>
Tue, 30 May 2023 15:56:08 +0000 (15:56 +0000)
committerJens Axboe <axboe@kernel.dk>
Thu, 1 Jun 2023 15:13:31 +0000 (09:13 -0600)
strlcpy() reads the entire source buffer first.
This read may exceed the destination size limit.
This is both inefficient and can lead to linear read
overflows if a source string is not NUL-terminated [1].
In an effort to remove strlcpy() completely [2], replace
strlcpy() here with strscpy().
No return values were used, so direct replacement is safe.

[1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
[2] https://github.com/KSPP/linux/issues/89

Signed-off-by: Azeem Shaikh <azeemshaikh38@gmail.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20230530155608.272266-1-azeemshaikh38@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-cgroup-fc-appid.c
block/elevator.c
block/genhd.c

index 842e5e1..3ec2133 100644 (file)
@@ -34,7 +34,7 @@ int blkcg_set_fc_appid(char *app_id, u64 cgrp_id, size_t app_id_len)
         * the vmid from the fabric.
         * Adding the overhead of a lock is not necessary.
         */
-       strlcpy(blkcg->fc_app_id, app_id, app_id_len);
+       strscpy(blkcg->fc_app_id, app_id, app_id_len);
        css_put(css);
 out_cgrp_put:
        cgroup_put(cgrp);
index 2490906..8400e30 100644 (file)
@@ -751,7 +751,7 @@ ssize_t elv_iosched_store(struct request_queue *q, const char *buf,
        if (!elv_support_iosched(q))
                return count;
 
-       strlcpy(elevator_name, buf, sizeof(elevator_name));
+       strscpy(elevator_name, buf, sizeof(elevator_name));
        ret = elevator_change(q, strstrip(elevator_name));
        if (!ret)
                return count;
index 1cb489b..3537b7d 100644 (file)
@@ -253,7 +253,7 @@ int __register_blkdev(unsigned int major, const char *name,
 #ifdef CONFIG_BLOCK_LEGACY_AUTOLOAD
        p->probe = probe;
 #endif
-       strlcpy(p->name, name, sizeof(p->name));
+       strscpy(p->name, name, sizeof(p->name));
        p->next = NULL;
        index = major_to_index(major);