Messages in this thread | | | Date | Thu, 17 Jul 2003 01:53:42 +0200 | From | Gergely Nagy <> | Subject | [devfs] Use before initialisation in devfs_mk_cdev() |
| |
Hi!
While playing around with implementing my first linux 2.5 module, I stumbled upon a buglet in devfs (though, if used properly, it probably won't surface ever). The problem - as I see it - is that devfs_mk_cdev() first checks the mode passed to it, and if it thinks it is not a char device, it prints a warning and aborts. Now, this printing involves the local variable `buf' (char buf[64]), which is not initialised at that point.
The problematic code is:
int devfs_mk_cdev(dev_t dev, umode_t mode, const char *fmt, ...) { struct devfs_entry *dir = NULL, *de; char buf[64]; va_list args; int error, n;
if (!S_ISCHR(mode)) { printk(KERN_WARNING "%s: invalide mode (%u) for %s\n", __FUNCTION__, mode, buf); return -EINVAL; }
One option would be to try to initialise buf earlier, another would be to just remove the "for %s" part, and the buf reference in the printk (but that way, some information would be lost).
Anyways, I just noticed that when my buggy code called devfs_mk_cdev (blah, 0, etc..) it printed garbage on module insertion, so I thought I'd drop a notice.
Oh, this is with Linux 2.6.0-test1-mm1.
Cheers, -- Gergely Nagy - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |