summaryrefslogtreecommitdiffstats
path: root/disk-utils/fsck.minix.c
diff options
context:
space:
mode:
authorSami Kerola2015-01-03 10:20:05 +0100
committerKarel Zak2015-01-07 10:14:13 +0100
commit730ae9c899719a6e5e7b79f25bd280827d142ae8 (patch)
treefc7cbad9f1571e2b43dde59e56a749614da1d432 /disk-utils/fsck.minix.c
parentlslocks: fix type warning (diff)
downloadkernel-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.c13
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--;