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
337void *grab_file(const char *filename, unsigned long *size)337void *grab_file(const char *filename, unsigned long *size)
338{338{
339 struct stat st;339 struct stat st;
340 void *map;340 void *map = MAP_FAILED;
341 int fd;341 int fd;
342 342
343 fd = open(filename, O_RDONLY);343 fd = open(filename, O_RDONLY);
344 if (fd < 0 || fstat(fd, &st) != 0)344 if (fd < 0)
345 return NULL;345 return NULL;
346 if (fstat(fd, &st))
347 goto failed;
346 348
347 *size = st.st_size;349 *size = st.st_size;
348 map = mmap(NULL, *size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);350 map = mmap(NULL, *size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
349 close(fd);
350 351
352failed:
353 close(fd);
351 if (map == MAP_FAILED)354 if (map == MAP_FAILED)
352 return NULL;355 return NULL;
353 return map;356 return map;