Convert usage of strchr()/strncpy()/strncat() to
strnchr()/memcpy()/strlcat() for simpler and safer string manipulation.

Reported-by: David Laight <david.lai...@aculab.com>
Signed-off-by: Naveen N. Rao <naveen.n....@linux.vnet.ibm.com>
---
Changes: Additionally convert the strchr().


 arch/powerpc/kernel/kprobes.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
index 97b5eed1f76d..c73fb6e3b43f 100644
--- a/arch/powerpc/kernel/kprobes.c
+++ b/arch/powerpc/kernel/kprobes.c
@@ -65,28 +65,27 @@ kprobe_opcode_t *kprobe_lookup_name(const char *name, 
unsigned int offset)
        char dot_name[MODULE_NAME_LEN + 1 + KSYM_NAME_LEN];
        const char *modsym;
        bool dot_appended = false;
-       if ((modsym = strchr(name, ':')) != NULL) {
+       if ((modsym = strnchr(name, ':', MODULE_NAME_LEN)) != NULL) {
                modsym++;
                if (*modsym != '\0' && *modsym != '.') {
                        /* Convert to <module:.symbol> */
-                       strncpy(dot_name, name, modsym - name);
+                       memcpy(dot_name, name, modsym - name);
                        dot_name[modsym - name] = '.';
                        dot_name[modsym - name + 1] = '\0';
-                       strncat(dot_name, modsym,
-                               sizeof(dot_name) - (modsym - name) - 2);
+                       strlcat(dot_name, modsym, sizeof(dot_name));
                        dot_appended = true;
                } else {
                        dot_name[0] = '\0';
-                       strncat(dot_name, name, sizeof(dot_name) - 1);
+                       strlcat(dot_name, name, sizeof(dot_name));
                }
        } else if (name[0] != '.') {
                dot_name[0] = '.';
                dot_name[1] = '\0';
-               strncat(dot_name, name, KSYM_NAME_LEN - 2);
+               strlcat(dot_name, name, sizeof(dot_name));
                dot_appended = true;
        } else {
                dot_name[0] = '\0';
-               strncat(dot_name, name, KSYM_NAME_LEN - 1);
+               strlcat(dot_name, name, sizeof(dot_name));
        }
        addr = (kprobe_opcode_t *)kallsyms_lookup_name(dot_name);
        if (!addr && dot_appended) {
-- 
2.12.1

Reply via email to