diff options
author | Sami Kerola | 2015-01-03 10:20:05 +0100 |
---|---|---|
committer | Karel Zak | 2015-01-07 10:14:13 +0100 |
commit | 730ae9c899719a6e5e7b79f25bd280827d142ae8 (patch) | |
tree | fc7cbad9f1571e2b43dde59e56a749614da1d432 /disk-utils/fsck.minix.c | |
parent | lslocks: fix type warning (diff) | |
download | kernel-qcow2-util-linux-730ae9c899719a6e5e7b79f25bd280827d142ae8.tar.gz kernel-qcow2-util-linux-730ae9c899719a6e5e7b79f25bd280827d142ae8.tar.xz kernel-qcow2-util-linux-730ae9c899719a6e5e7b79f25bd280827d142ae8.zip |
fsck.minix: fix segmentation fault
Return from check_file() and check_file2() functions when maximum name
depth is reached. The use unsafe strncpy() is also removed just to be on
safe side.
Addresses: https://bugs.debian.org/773892
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'disk-utils/fsck.minix.c')
-rw-r--r-- | disk-utils/fsck.minix.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/disk-utils/fsck.minix.c b/disk-utils/fsck.minix.c index 9d4754884..ac2dc47fd 100644 --- a/disk-utils/fsck.minix.c +++ b/disk-utils/fsck.minix.c @@ -112,6 +112,7 @@ #include "all-io.h" #include "closestream.h" #include "rpmatch.h" +#include "strutils.h" #define ROOT_INO 1 #define YESNO_LENGTH 64 @@ -956,7 +957,9 @@ check_file(struct minix_inode *dir, unsigned int offset) { ino = 0; } if (name_depth < MAX_DEPTH) - strncpy(name_list[name_depth], name, namelen); + xstrncpy(name_list[name_depth], name, namelen); + else + return; name_depth++; inode = get_inode(ino); name_depth--; @@ -981,7 +984,9 @@ check_file(struct minix_inode *dir, unsigned int offset) { if (!inode) return; if (name_depth < MAX_DEPTH) - strncpy(name_list[name_depth], name, namelen); + xstrncpy(name_list[name_depth], name, namelen); + else + return; name_depth++; if (list) { if (verbose) @@ -1024,7 +1029,9 @@ check_file2(struct minix2_inode *dir, unsigned int offset) { ino = 0; } if (name_depth < MAX_DEPTH) - strncpy(name_list[name_depth], name, namelen); + xstrncpy(name_list[name_depth], name, namelen); + else + return; name_depth++; inode = get_inode2(ino); name_depth--; |