[PATCH] Stop docproc segfaulting when SRCTREE isn't set. - Kernel

This is a discussion on [PATCH] Stop docproc segfaulting when SRCTREE isn't set. - Kernel ; From: Rob Landley Prevent docproc from segfaulting when SRCTREE isn't set. Signed-off-by: Rob Landley --- scripts/basic/docproc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff -r a26a53ed1101 scripts/basic/docproc.c --- a/scripts/basic/docproc.c Sun Oct 07 16:42:22 2007 -0700 +++ b/scripts/basic/docproc.c ...

+ Reply to Thread
Results 1 to 9 of 9

Thread: [PATCH] Stop docproc segfaulting when SRCTREE isn't set.

  1. [PATCH] Stop docproc segfaulting when SRCTREE isn't set.

    From: Rob Landley

    Prevent docproc from segfaulting when SRCTREE isn't set.

    Signed-off-by: Rob Landley
    ---

    scripts/basic/docproc.c | 10 ++++++++--
    1 file changed, 8 insertions(+), 2 deletions(-)

    diff -r a26a53ed1101 scripts/basic/docproc.c
    --- a/scripts/basic/docproc.c Sun Oct 07 16:42:22 2007 -0700
    +++ b/scripts/basic/docproc.c Tue Oct 09 01:08:54 2007 -0500
    @@ -64,12 +64,15 @@ FILELINE * entity_system;
    #define FUNCTION "-function"
    #define NOFUNCTION "-nofunction"

    +char *srctree;
    +
    void usage (void)
    {
    fprintf(stderr, "Usage: docproc {doc|depend} file\n");
    fprintf(stderr, "Input is read from file.tmpl. Output is sent to stdout\n");
    fprintf(stderr, "doc: frontend when generating kernel documentation\n");
    fprintf(stderr, "depend: generate list of files referenced within file\n");
    + fprintf(stderr, "Environment variable SRCTREE: absolute path to kernel source tree.\n");
    }

    /*
    @@ -88,7 +91,7 @@ void exec_kernel_doc(char **svec)
    exit(1);
    case 0:
    memset(real_filename, 0, sizeof(real_filename));
    - strncat(real_filename, getenv("SRCTREE"), PATH_MAX);
    + strncat(real_filename, srctree, PATH_MAX);
    strncat(real_filename, KERNELDOCPATH KERNELDOC,
    PATH_MAX - strlen(real_filename));
    execvp(real_filename, svec);
    @@ -168,7 +171,7 @@ void find_export_symbols(char * filename
    if (filename_exist(filename) == NULL) {
    char real_filename[PATH_MAX + 1];
    memset(real_filename, 0, sizeof(real_filename));
    - strncat(real_filename, getenv("SRCTREE"), PATH_MAX);
    + strncat(real_filename, srctree, PATH_MAX);
    strncat(real_filename, filename,
    PATH_MAX - strlen(real_filename));
    sym = add_new_file(filename);
    @@ -335,6 +338,9 @@ int main(int argc, char *argv[])
    int main(int argc, char *argv[])
    {
    FILE * infile;
    +
    + srctree = getenv("SRCTREE");
    + if (!srctree) srctree = getcwd(NULL,0);
    if (argc != 3) {
    usage();
    exit(1);

    --
    "One of my most productive days was throwing away 1000 lines of code."
    - Ken Thompson.
    -
    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/

  2. Re: [PATCH] Stop docproc segfaulting when SRCTREE isn't set.

    Hi Rob,

    On Tue, Oct 09, 2007 at 01:25:18AM -0500, Rob Landley wrote:
    [...]
    > FILE * infile;
    > +
    > + srctree = getenv("SRCTREE");
    > + if (!srctree) srctree = getcwd(NULL,0);
    > if (argc != 3) {
    > usage();
    > exit(1);


    $ man getcwd

    char *getcwd(char *buf, size_t size);

    As an extension to the POSIX.1 standard, Linux (libc4, libc5, glibc) getcwd()
    allocates the buffer dynamically using malloc() if buf is NULL on call.

    Shouldn't "srctree" be free()ed in case getenv("SRCTREE") failed ?

    Regards,

    --
    Ahmed S. Darwish
    HomePage: http://darwish.07.googlepages.com
    Blog: http://darwish-07.blogspot.com
    -
    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/

  3. Re: [PATCH] Stop docproc segfaulting when SRCTREE isn't set.

    On Tue, 9 Oct 2007 15:03:15 +0200 Ahmed S. Darwish wrote:

    > Hi Rob,
    >
    > On Tue, Oct 09, 2007 at 01:25:18AM -0500, Rob Landley wrote:
    > [...]
    > > FILE * infile;
    > > +
    > > + srctree = getenv("SRCTREE");
    > > + if (!srctree) srctree = getcwd(NULL,0);
    > > if (argc != 3) {
    > > usage();
    > > exit(1);

    >
    > $ man getcwd
    >
    > char *getcwd(char *buf, size_t size);
    >
    > As an extension to the POSIX.1 standard, Linux (libc4, libc5, glibc) getcwd()
    > allocates the buffer dynamically using malloc() if buf is NULL on call.
    >
    > Shouldn't "srctree" be free()ed in case getenv("SRCTREE") failed ?


    What is there to free() at that point? If getenv() fails (i.e.,
    the env. variable is not found), it returns NULL.
    or do I need another cup of coffee?

    ---
    ~Randy
    -
    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/

  4. Re: [PATCH] Stop docproc segfaulting when SRCTREE isn't set.

    On Tue, 9 Oct 2007 01:25:18 -0500 Rob Landley wrote:

    > From: Rob Landley
    >
    > Prevent docproc from segfaulting when SRCTREE isn't set.
    >
    > Signed-off-by: Rob Landley


    Acked-by: Randy Dunlap

    but needs 2 coding style fixes... see near end, below.

    > ---
    >
    > scripts/basic/docproc.c | 10 ++++++++--
    > 1 file changed, 8 insertions(+), 2 deletions(-)
    >
    > diff -r a26a53ed1101 scripts/basic/docproc.c
    > --- a/scripts/basic/docproc.c Sun Oct 07 16:42:22 2007 -0700
    > +++ b/scripts/basic/docproc.c Tue Oct 09 01:08:54 2007 -0500
    > @@ -64,12 +64,15 @@ FILELINE * entity_system;
    > #define FUNCTION "-function"
    > #define NOFUNCTION "-nofunction"
    >
    > +char *srctree;
    > +
    > void usage (void)
    > {
    > fprintf(stderr, "Usage: docproc {doc|depend} file\n");
    > fprintf(stderr, "Input is read from file.tmpl. Output is sent to stdout\n");
    > fprintf(stderr, "doc: frontend when generating kernel documentation\n");
    > fprintf(stderr, "depend: generate list of files referenced within file\n");
    > + fprintf(stderr, "Environment variable SRCTREE: absolute path to kernel source tree.\n");
    > }
    >
    > /*
    > @@ -88,7 +91,7 @@ void exec_kernel_doc(char **svec)
    > exit(1);
    > case 0:
    > memset(real_filename, 0, sizeof(real_filename));
    > - strncat(real_filename, getenv("SRCTREE"), PATH_MAX);
    > + strncat(real_filename, srctree, PATH_MAX);
    > strncat(real_filename, KERNELDOCPATH KERNELDOC,
    > PATH_MAX - strlen(real_filename));
    > execvp(real_filename, svec);
    > @@ -168,7 +171,7 @@ void find_export_symbols(char * filename
    > if (filename_exist(filename) == NULL) {
    > char real_filename[PATH_MAX + 1];
    > memset(real_filename, 0, sizeof(real_filename));
    > - strncat(real_filename, getenv("SRCTREE"), PATH_MAX);
    > + strncat(real_filename, srctree, PATH_MAX);
    > strncat(real_filename, filename,
    > PATH_MAX - strlen(real_filename));
    > sym = add_new_file(filename);
    > @@ -335,6 +338,9 @@ int main(int argc, char *argv[])
    > int main(int argc, char *argv[])
    > {
    > FILE * infile;
    > +
    > + srctree = getenv("SRCTREE");
    > + if (!srctree) srctree = getcwd(NULL,0);


    if (!srctree)
    srctree = getcwd(NULL, 0);

    > if (argc != 3) {
    > usage();
    > exit(1);
    >
    > --



    ---
    ~Randy
    -
    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/

  5. Re: [PATCH] Stop docproc segfaulting when SRCTREE isn't set.

    Ahmed S. Darwish wrote:
    > On Tue, Oct 09, 2007 at 08:55:00AM -0700, Randy Dunlap wrote:
    >> On Tue, 9 Oct 2007 15:03:15 +0200 Ahmed S. Darwish wrote:
    >>
    >>> Hi Rob,
    >>>
    >>> On Tue, Oct 09, 2007 at 01:25:18AM -0500, Rob Landley wrote:
    >>> [...]
    >>>> FILE * infile;
    >>>> +
    >>>> + srctree = getenv("SRCTREE");
    >>>> + if (!srctree) srctree = getcwd(NULL,0);
    >>>> if (argc != 3) {
    >>>> usage();
    >>>> exit(1);
    >>> $ man getcwd
    >>>
    >>> char *getcwd(char *buf, size_t size);
    >>>
    >>> As an extension to the POSIX.1 standard, Linux (libc4, libc5, glibc) getcwd()
    >>> allocates the buffer dynamically using malloc() if buf is NULL on call.
    >>>
    >>> Shouldn't "srctree" be free()ed in case getenv("SRCTREE") failed ?

    >> What is there to free() at that point? If getenv() fails (i.e.,
    >> the env. variable is not found), it returns NULL.
    >> or do I need another cup of coffee?
    >>

    >
    > I meant if getenv() failed, "srctree = getcwd(NULL, 0)" will let
    > "srctree" point to a _ malloc()ed _ buffer representing PWD.
    > As said in the manpage, this buffer needs to be free()ed after usage.
    > Right or I'm the one who needs that cup of coffee ?


    so it needs to be freed at program termination, is that what you are
    saying? That will happen automatically (along with any open files being
    closed, etc.).

    --
    ~Randy
    -
    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/

  6. Re: [PATCH] Stop docproc segfaulting when SRCTREE isn't set.

    On Tue, Oct 09, 2007 at 08:55:00AM -0700, Randy Dunlap wrote:
    > On Tue, 9 Oct 2007 15:03:15 +0200 Ahmed S. Darwish wrote:
    >
    > > Hi Rob,
    > >
    > > On Tue, Oct 09, 2007 at 01:25:18AM -0500, Rob Landley wrote:
    > > [...]
    > > > FILE * infile;
    > > > +
    > > > + srctree = getenv("SRCTREE");
    > > > + if (!srctree) srctree = getcwd(NULL,0);
    > > > if (argc != 3) {
    > > > usage();
    > > > exit(1);

    > >
    > > $ man getcwd
    > >
    > > char *getcwd(char *buf, size_t size);
    > >
    > > As an extension to the POSIX.1 standard, Linux (libc4, libc5, glibc) getcwd()
    > > allocates the buffer dynamically using malloc() if buf is NULL on call.
    > >
    > > Shouldn't "srctree" be free()ed in case getenv("SRCTREE") failed ?

    >
    > What is there to free() at that point? If getenv() fails (i.e.,
    > the env. variable is not found), it returns NULL.
    > or do I need another cup of coffee?
    >


    I meant if getenv() failed, "srctree = getcwd(NULL, 0)" will let
    "srctree" point to a _ malloc()ed _ buffer representing PWD.
    As said in the manpage, this buffer needs to be free()ed after usage.
    Right or I'm the one who needs that cup of coffee ?

    Regards,

    --
    Ahmed S. Darwish
    HomePage: http://darwish.07.googlepages.com
    Blog: http://darwish-07.blogspot.com
    -
    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/

  7. Re: [PATCH] Stop docproc segfaulting when SRCTREE isn't set.

    On Tue, Oct 09, 2007 at 10:24:03AM -0700, Randy Dunlap wrote:
    > Ahmed S. Darwish wrote:
    > >On Tue, Oct 09, 2007 at 08:55:00AM -0700, Randy Dunlap wrote:
    > >>On Tue, 9 Oct 2007 15:03:15 +0200 Ahmed S. Darwish wrote:
    > >>
    > >>>Hi Rob,
    > >>>
    > >>>On Tue, Oct 09, 2007 at 01:25:18AM -0500, Rob Landley wrote:
    > >>>[...]
    > >>>> FILE * infile;
    > >>>>+
    > >>>>+ srctree = getenv("SRCTREE");
    > >>>>+ if (!srctree) srctree = getcwd(NULL,0);
    > >>>> if (argc != 3) {
    > >>>> usage();
    > >>>> exit(1);
    > >>>$ man getcwd
    > >>>
    > >>> char *getcwd(char *buf, size_t size);
    > >>>
    > >>> As an extension to the POSIX.1 standard, Linux (libc4, libc5, glibc)
    > >>> getcwd() allocates the buffer dynamically using malloc() if buf is NULL
    > >>> on call.
    > >>>
    > >>>Shouldn't "srctree" be free()ed in case getenv("SRCTREE") failed ?
    > >>What is there to free() at that point? If getenv() fails (i.e.,
    > >>the env. variable is not found), it returns NULL.
    > >>or do I need another cup of coffee?
    > >>

    > >
    > >I meant if getenv() failed, "srctree = getcwd(NULL, 0)" will let
    > >"srctree" point to a _ malloc()ed _ buffer representing PWD.
    > >As said in the manpage, this buffer needs to be free()ed after usage.
    > >Right or I'm the one who needs that cup of coffee ?

    >
    > so it needs to be freed at program termination, is that what you are
    > saying? That will happen automatically (along with any open files being
    > closed, etc.).
    >


    I didn't know that leaked mem will be automatically freed at program
    termination. A new info, Thanks!.

    --
    Ahmed S. Darwish
    HomePage: http://darwish.07.googlepages.com
    Blog: http://darwish-07.blogspot.com
    -
    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/

  8. Re: [PATCH] Stop docproc segfaulting when SRCTREE isn't set.

    On Tuesday 09 October 2007 8:03:15 am Ahmed S. Darwish wrote:
    > $ man getcwd
    >
    > char *getcwd(char *buf, size_t size);
    >
    > As an extension to the POSIX.1 standard, Linux (libc4, libc5, glibc)
    > getcwd() allocates the buffer dynamically using malloc() if buf is NULL on
    > call.
    >
    > Shouldn't "srctree" be free()ed in case getenv("SRCTREE") failed ?


    If exit() doesn't free all the memory the program allocated, we have bigger
    problems.

    > Regards,


    Rob
    --
    "One of my most productive days was throwing away 1000 lines of code."
    - Ken Thompson.
    -
    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/

  9. Re: [PATCH] Stop docproc segfaulting when SRCTREE isn't set.

    On Tue, Oct 09, 2007 at 01:25:18AM -0500, Rob Landley wrote:
    > From: Rob Landley
    >
    > Prevent docproc from segfaulting when SRCTREE isn't set.
    >
    > Signed-off-by: Rob Landley


    Applied to kbuild.git (with Randy's style fixup).

    Sam
    -
    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/

+ Reply to Thread