Page MenuHomeFreeBSD

D6368.diff
No OneTemporary

D6368.diff

Index: head/usr.sbin/acpi/acpidb/acpidb.c
===================================================================
--- head/usr.sbin/acpi/acpidb/acpidb.c
+++ head/usr.sbin/acpi/acpidb/acpidb.c
@@ -385,8 +385,7 @@
ACPI_NEW_TABLE_DESC *list;
u_int8_t *code;
struct stat sb;
- int fd, fd2;
- int error;
+ int dounlink, error, fd;
fd = open(dsdtfile, O_RDONLY, 0);
if (fd == -1) {
@@ -399,11 +398,13 @@
return (-1);
}
code = mmap(NULL, (size_t)sb.st_size, PROT_READ, MAP_PRIVATE, fd, (off_t)0);
+ close(fd);
if (code == NULL) {
perror("mmap");
return (-1);
}
if ((error = AcpiInitializeSubsystem()) != AE_OK) {
+ munmap(code, (size_t)sb.st_size);
return (-1);
}
@@ -411,21 +412,30 @@
* make sure DSDT data contains table header or not.
*/
if (strncmp((char *)code, "DSDT", 4) == 0) {
- strncpy(filetmp, dsdtfile, sizeof(filetmp));
+ dounlink = 0;
+ strlcpy(filetmp, dsdtfile, sizeof(filetmp));
} else {
+ dounlink = 1;
mode_t mode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
dummy_dsdt_table.Length = sizeof(ACPI_TABLE_HEADER) + sb.st_size;
- snprintf(filetmp, sizeof(filetmp), "%s.tmp", dsdtfile);
- fd2 = open(filetmp, O_WRONLY | O_CREAT | O_TRUNC, mode);
- if (fd2 == -1) {
+ if ((size_t)snprintf(filetmp, sizeof(filetmp), "%s.tmp",
+ dsdtfile) > sizeof(filetmp) - 1) {
+ fprintf(stderr, "file name too long\n");
+ munmap(code, (size_t)sb.st_size);
+ return (-1);
+ }
+ fd = open(filetmp, O_WRONLY | O_CREAT | O_TRUNC, mode);
+ if (fd == -1) {
perror("open");
+ munmap(code, (size_t)sb.st_size);
return (-1);
}
- write(fd2, &dummy_dsdt_table, sizeof(ACPI_TABLE_HEADER));
+ write(fd, &dummy_dsdt_table, sizeof(ACPI_TABLE_HEADER));
- write(fd2, code, sb.st_size);
- close(fd2);
+ write(fd, code, sb.st_size);
+ close(fd);
}
+ munmap(code, (size_t)sb.st_size);
/*
* Install the virtual machine version of address space handlers.
@@ -487,7 +497,7 @@
AcpiGbl_DebuggerConfiguration = 0;
AcpiDbUserCommands(':', NULL);
- if (strcmp(dsdtfile, filetmp) != 0) {
+ if (dounlink) {
unlink(filetmp);
}

File Metadata

Mime Type
text/plain
Expires
Sat, Jan 31, 8:08 PM (6 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28173351
Default Alt Text
D6368.diff (2 KB)

Event Timeline