Michael Tokarev, mjt at tls dot msk dot ru writes:
authorEric Andersen <andersen@codepoet.org>
Tue, 6 Apr 2004 12:04:14 +0000 (12:04 -0000)
committerEric Andersen <andersen@codepoet.org>
Tue, 6 Apr 2004 12:04:14 +0000 (12:04 -0000)
Initialize all fields of struct dep_t.
Without that, e.g. `busybox modprobe -v char-major-10-144' *sometimes*
fails this way (strace):

 write(1, "insmod    nvram `\213\f\10\n", 21) = 21

Note the garbage after module name which is taken from the m_options field,
which is not initialized in the alias reading/parsing part.
(Shell properly complains to this command, telling it can't find the
closing backtick)

modutils/modprobe.c

index c6a83553fc84c8b2cf7aeb1ad0408bcdd4acc59b..2b90eb0198180bc0712a9fac2b3b0cbef98ee4a9 100644 (file)
@@ -306,10 +306,10 @@ static struct dep_t *build_dep ( void )
                                        // fprintf ( stderr, "ALIAS: '%s' -> '%s'\n", alias, mod );
 
                                        if ( !current ) {
-                                               first = current = (struct dep_t *) xmalloc ( sizeof ( struct dep_t ));
+                                               first = current = (struct dep_t *) xcalloc ( 1, sizeof ( struct dep_t ));
                                        }
                                        else {
-                                               current-> m_next = (struct dep_t *) xmalloc ( sizeof ( struct dep_t ));
+                                               current-> m_next = (struct dep_t *) xcalloc ( 1, sizeof ( struct dep_t ));
                                                current = current-> m_next;
                                        }
                                        current-> m_module  = bb_xstrdup ( alias );