summaryrefslogtreecommitdiffstats
path: root/sbin/mknod/mknod.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/mknod/mknod.c')
-rw-r--r--sbin/mknod/mknod.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/sbin/mknod/mknod.c b/sbin/mknod/mknod.c
index b70acf1..f1325e4 100644
--- a/sbin/mknod/mknod.c
+++ b/sbin/mknod/mknod.c
@@ -54,7 +54,8 @@ main(argc, argv)
{
extern int errno;
u_short mode;
- char *strerror();
+ u_int32_t major, minor;
+ char *endp;
if (argc != 5) {
(void)fprintf(stderr,
@@ -73,7 +74,20 @@ main(argc, argv)
exit(1);
}
- if (mknod(argv[1], mode, makedev(atoi(argv[3]), atoi(argv[4]))) < 0) {
+ major = strtoul(argv[3], &endp, 0);
+ if (*endp != '\0' || major >= 256) {
+ (void)fprintf(stderr,
+ "mknod: bad major number.\n");
+ exit(1);
+ }
+ minor = strtoul(argv[4], &endp, 0);
+ if (*endp != '\0') {
+ (void)fprintf(stderr,
+ "mknod: bad minor number.\n");
+ exit(1);
+ }
+
+ if (mknod(argv[1], mode, makedev(major, minor)) < 0) {
(void)fprintf(stderr,
"mknod: %s: %s\n", argv[1], strerror(errno));
exit(1);
OpenPOWER on IntegriCloud