diff options
author | phk <phk@FreeBSD.org> | 2003-02-04 11:04:26 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2003-02-04 11:04:26 +0000 |
commit | f313c57d47541a48ff1fb42315630e85797d3d5e (patch) | |
tree | 9490d64b98dcb15ec75695061da3092f837cf1b9 /sys/kern/kern_conf.c | |
parent | 9d6d3f16738b4468cf07e93bd017adae88c16871 (diff) | |
download | FreeBSD-src-f313c57d47541a48ff1fb42315630e85797d3d5e.zip FreeBSD-src-f313c57d47541a48ff1fb42315630e85797d3d5e.tar.gz |
Implement proper bounds-checking and truncation of device names, this has
become an issue now that end-user controlable attributes can become devices
names with the geom_vol_ffs class.
Diffstat (limited to 'sys/kern/kern_conf.c')
-rw-r--r-- | sys/kern/kern_conf.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c index e405d11..302a8bb 100644 --- a/sys/kern/kern_conf.c +++ b/sys/kern/kern_conf.c @@ -270,8 +270,11 @@ make_dev(struct cdevsw *devsw, int minor, uid_t uid, gid_t gid, int perms, const return (dev); } va_start(ap, fmt); - i = kvprintf(fmt, NULL, dev->si_name, 32, ap); - dev->si_name[i] = '\0'; + i = vsnrprintf(dev->__si_namebuf, sizeof dev->__si_namebuf, 32, fmt, ap); + if (i > (sizeof dev->__si_namebuf - 1)) { + printf("WARNING: Device name truncated! (%s)", + dev->__si_namebuf); + } va_end(ap); dev->si_devsw = devsw; dev->si_uid = uid; @@ -318,8 +321,11 @@ make_dev_alias(dev_t pdev, const char *fmt, ...) dev->si_flags |= SI_NAMED; dev_depends(pdev, dev); va_start(ap, fmt); - i = kvprintf(fmt, NULL, dev->si_name, 32, ap); - dev->si_name[i] = '\0'; + i = vsnrprintf(dev->__si_namebuf, sizeof dev->__si_namebuf, 32, fmt, ap); + if (i > (sizeof dev->__si_namebuf - 1)) { + printf("WARNING: Device name truncated! (%s)", + dev->__si_namebuf); + } va_end(ap); if (devfs_create_hook) |