strncmp(str, const, len) is error-prone because len is easy to have typo. The example is the hard-coded len has counting error or sizeof(const) forgets - 1. So we prefer using newly introduced str_has_prefix() to substitute such strncmp to make code better.
Signed-off-by: Chuhong Yuan <hsleste...@gmail.com> --- Changes in v4: - Eliminate assignments in if conditions. kernel/user_namespace.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c index 8eadadc478f9..bd5702f9273a 100644 --- a/kernel/user_namespace.c +++ b/kernel/user_namespace.c @@ -1138,6 +1138,7 @@ ssize_t proc_setgroups_write(struct file *file, const char __user *buf, char kbuf[8], *pos; bool setgroups_allowed; ssize_t ret; + size_t len; /* Only allow a very narrow range of strings to be written */ ret = -EINVAL; @@ -1153,16 +1154,19 @@ ssize_t proc_setgroups_write(struct file *file, const char __user *buf, /* What is being requested? */ ret = -EINVAL; - if (strncmp(pos, "allow", 5) == 0) { - pos += 5; + + len = str_has_prefix(pos, "allow"); + if (len) { + pos += len; setgroups_allowed = true; + } else { + len = str_has_prefix(pos, "deny"); + if (len) { + pos += len; + setgroups_allowed = false; + } else + goto out; } - else if (strncmp(pos, "deny", 4) == 0) { - pos += 4; - setgroups_allowed = false; - } - else - goto out; /* Verify there is not trailing junk on the line */ pos = skip_spaces(pos); -- 2.20.1