shadow-maint / shadow

Upstream shadow tree
Other
287 stars 227 forks source link

More fixes for resource leaks #997

Closed alejandro-colomar closed 1 month ago

alejandro-colomar commented 1 month ago

While at it, I found and fixed a file-descriptor leak too, and a free(3) of an invalid pointer.


Revisions:

v2 - The only fdopen(3) mode that makes sense with mkstemp(3) is `"w"`. ``` $ git range-diff shadow/master gh/goto2 goto2 1: f753dbe8 = 1: f753dbe8 src/useradd.c: set_defaults(): Fix order of clean-ups 2: 29e95616 = 2: 29e95616 src/useradd.c: set_defaults(): Rename goto label 3: 555b8b07 = 3: 555b8b07 src/useradd.c: set_defaults(): Do not free(3) the result of asprintf(3) if it failed 4: 29471eec = 4: 29471eec src/useradd.c: De-duplicate code 5: 4d125f77 ! 5: 59bb454a src/useradd.c: Add fmkstemp() to fix file-descriptor leak @@ src/useradd.c: static void create_home (void); static void create_mail (void); static void check_uid_range(int rflg, uid_t user_id); -+static FILE *fmkstemp(char *restrict template, const char *restrict mode); ++static FILE *fmkstemp(char *template); + + /* @@ src/useradd.c: static int set_defaults (void) - } - - ofp = fdopen (ofd, "w"); -+ ofp = fmkstemp(new_file, "w"); ++ ofp = fmkstemp(new_file); if (NULL == ofp) { fprintf (stderr, _("%s: cannot open new defaults file\n"), @@ src/useradd.c: int main (int argc, char **argv) + +static FILE * -+fmkstemp(char *restrict template, const char *restrict mode) ++fmkstemp(char *template) +{ + int fd; + FILE *fp; @@ src/useradd.c: int main (int argc, char **argv) + if (fd == -1) + return NULL; + -+ fp = fdopen(fd, mode); ++ fp = fdopen(fd, "w"); + if (fp == NULL) { + close(fd); + unlink(template); 6: 2a44857f = 6: 29aa3459 src/useradd.c: set_defaults(): Fix FILE* leak ```
alejandro-colomar commented 1 month ago

Thanks! =)