diff options
author | Christoph Hellwig <hch@lst.de> | 2022-10-20 08:48:17 +0200 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2022-10-23 18:59:17 -0600 |
commit | 58367c8a5f845498fd341e5687bab513925e4ac0 (patch) | |
tree | adb084cfe60e6cd540516d5bf8670053ebf74800 /block/elevator.c | |
parent | dd6f7f17bf5831ac94d2b8ffe3d67dac201a9b97 (diff) |
block: sanitize the elevator name before passing it to __elevator_change
The stripped name should also be used for the none check. To do so
strip it in the caller and pass in the sanitized name. Drop the pointless
__ prefix in the function name while we're at it.
Based on a patch from Jinlong Chen <nickyc975@zju.edu.cn>.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20221020064819.1469928-3-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/elevator.c')
-rw-r--r-- | block/elevator.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/block/elevator.c b/block/elevator.c index 8fb404a89f2e..5b8fb8745e9a 100644 --- a/block/elevator.c +++ b/block/elevator.c @@ -734,9 +734,8 @@ int elevator_switch(struct request_queue *q, struct elevator_type *new_e) /* * Switch this queue to the given IO scheduler. */ -static int __elevator_change(struct request_queue *q, const char *name) +static int elevator_change(struct request_queue *q, const char *elevator_name) { - char elevator_name[ELV_NAME_MAX]; struct elevator_type *e; /* Make sure queue is not in the middle of being removed */ @@ -746,14 +745,13 @@ static int __elevator_change(struct request_queue *q, const char *name) /* * Special case for mq, turn off scheduling */ - if (!strncmp(name, "none", 4)) { + if (!strncmp(elevator_name, "none", 4)) { if (!q->elevator) return 0; return elevator_switch(q, NULL); } - strlcpy(elevator_name, name, sizeof(elevator_name)); - e = elevator_get(q, strstrip(elevator_name), true); + e = elevator_get(q, elevator_name, true); if (!e) return -EINVAL; @@ -766,18 +764,19 @@ static int __elevator_change(struct request_queue *q, const char *name) return elevator_switch(q, e); } -ssize_t elv_iosched_store(struct request_queue *q, const char *name, +ssize_t elv_iosched_store(struct request_queue *q, const char *buf, size_t count) { + char elevator_name[ELV_NAME_MAX]; int ret; if (!elv_support_iosched(q)) return count; - ret = __elevator_change(q, name); + strlcpy(elevator_name, buf, sizeof(elevator_name)); + ret = elevator_change(q, strstrip(elevator_name)); if (!ret) return count; - return ret; } |