The commit is pushed to "branch-rh9-5.14.vz9.1.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after ark-5.14 ------> commit 7e108c9027dd32bbc09d63d054f36491ef2932a6 Author: Kirill Tkhai <ktk...@virtuozzo.com> Date: Tue Sep 28 19:17:30 2021 +0300
push_backup: Do not take write lock on ENOTTY Userspace may pass wrong command. Do not take write lock then. To_merge: 69eac404315a ("dm: Add push backup driver") Signed-off-by: Kirill Tkhai <ktk...@virtuozzo.com> --- drivers/md/dm-push-backup.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/drivers/md/dm-push-backup.c b/drivers/md/dm-push-backup.c index 6d7b1859298a..1500d0681cee 100644 --- a/drivers/md/dm-push-backup.c +++ b/drivers/md/dm-push-backup.c @@ -329,11 +329,10 @@ static void pb_release_clone(struct request *clone, blk_put_request(clone); } -static bool msg_wants_down_read(const char *cmd) +static bool msg_wants_down_write(const char *cmd) { - if (!strcmp(cmd, "push_backup_read") || - !strcmp(cmd, "push_backup_write") || - !strcmp(cmd, "push_backup_statistics")) + if (!strcmp(cmd, "push_backup_start") || + !strcmp(cmd, "push_backup_stop")) return true; return false; @@ -567,7 +566,7 @@ static int pb_message(struct dm_target *ti, unsigned int argc, char **argv, struct push_backup *pb = ti->private; int ret = -EPERM; u64 val, val2; - bool read; + bool write; if (!capable(CAP_SYS_ADMIN)) goto out; @@ -576,11 +575,11 @@ static int pb_message(struct dm_target *ti, unsigned int argc, char **argv, if (argc < 1) goto out; - read = msg_wants_down_read(argv[0]); - if (read) - ret = down_read_killable(&pb->ctl_rwsem); - else + write = msg_wants_down_write(argv[0]); + if (write) ret = down_write_killable(&pb->ctl_rwsem); + else + ret = down_read_killable(&pb->ctl_rwsem); if (unlikely(ret)) goto out; @@ -612,10 +611,10 @@ static int pb_message(struct dm_target *ti, unsigned int argc, char **argv, } unlock: - if (read) - up_read(&pb->ctl_rwsem); - else + if (write) up_write(&pb->ctl_rwsem); + else + up_read(&pb->ctl_rwsem); out: return ret; } _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel