History

modpost: Stop grab_file() from leaking filedescriptors if fstat() fails

In case the open() call succeeds but the subsequent fstat() call fails, then we'll return without close()'ing the filedescriptor.

Jesper Juhl committed 14 years ago

Commit eb3d5cc1 parent 61011671 file · +6 −3Browse files

Unified · Split

scripts/mod/modpost.c+6−3
@@ -337,17 +337,20 @@ static void sym_update_crc(const char *name, struct module *mod, · 336 unmodified lines
337337 void *grab_file(const char *filename, unsigned long *size)
338338 {
339339 struct stat st;
340− void *map;
340+ void *map = MAP_FAILED;
341341 int fd;
342342
343343 fd = open(filename, O_RDONLY);
344− if (fd < 0 || fstat(fd, &st) != 0)
344+ if (fd < 0)
345345 return NULL;
346+ if (fstat(fd, &st))
347+ goto failed;
346348
347349 *size = st.st_size;
348350 map = mmap(NULL, *size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
349− close(fd);
350351
352+failed:
353+ close(fd);
351354 if (map == MAP_FAILED)
352355 return NULL;
353356 return map;