util/inteltool: Remove duplicated error message, switch to snprintf
Passing a string containing output from strerror() to perror() causes double error message display. It is also causing segfaults when the error message is longer than temp_string capacity. To fix the problems, sterror() call has been removed so the error message is printed only once. This could be enough to avoid segfaults, but it is a good practice to limit output size with snprintf(). Change-Id: I5ccc37e404f278cafae0a451c5acaa27d7907cce Signed-off-by: Maciej Suminski <maciej.suminski@cern.ch> Reviewed-on: https://review.coreboot.org/21025 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de>
This commit is contained in:
parent
b3dfcb863c
commit
d5fb99eab6
|
@ -117,14 +117,13 @@ static int open_and_seek(int cpu, unsigned long msr, int mode, int *fd)
|
||||||
*fd = open(dev, mode);
|
*fd = open(dev, mode);
|
||||||
|
|
||||||
if (*fd < 0) {
|
if (*fd < 0) {
|
||||||
sprintf(temp_string,
|
snprintf(temp_string, sizeof(temp_string), "open(\"%s\")", dev);
|
||||||
"open(\"%s\"): %s\n", dev, strerror(errno));
|
|
||||||
perror(temp_string);
|
perror(temp_string);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lseek(*fd, msr, SEEK_SET) == (off_t)-1) {
|
if (lseek(*fd, msr, SEEK_SET) == (off_t)-1) {
|
||||||
sprintf(temp_string, "lseek(%lu): %s\n", msr, strerror(errno));
|
snprintf(temp_string, sizeof(temp_string), "lseek(%lu)", msr);
|
||||||
perror(temp_string);
|
perror(temp_string);
|
||||||
close(*fd);
|
close(*fd);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -141,7 +140,8 @@ msr_t rdmsr_from_cpu(int cpu, unsigned long addr)
|
||||||
char temp_string[50];
|
char temp_string[50];
|
||||||
|
|
||||||
if (open_and_seek(cpu, addr, O_RDONLY, &fd) < 0) {
|
if (open_and_seek(cpu, addr, O_RDONLY, &fd) < 0) {
|
||||||
sprintf(temp_string, "Could not read MSR for CPU#%d", cpu);
|
snprintf(temp_string, sizeof(temp_string),
|
||||||
|
"Could not read MSR for CPU#%d", cpu);
|
||||||
perror(temp_string);
|
perror(temp_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,13 +194,11 @@ int print_sgx(void)
|
||||||
#ifndef __DARWIN__
|
#ifndef __DARWIN__
|
||||||
int ncpus = get_number_of_cpus();
|
int ncpus = get_number_of_cpus();
|
||||||
int i = 0;
|
int i = 0;
|
||||||
char temp_string[50];
|
|
||||||
|
|
||||||
printf("\n============= Dumping INTEL SGX status =============");
|
printf("\n============= Dumping INTEL SGX status =============");
|
||||||
|
|
||||||
if (ncpus < 1) {
|
if (ncpus < 1) {
|
||||||
sprintf(temp_string, "Failed to get number of CPUs\n");
|
perror("Failed to get number of CPUs");
|
||||||
perror(temp_string);
|
|
||||||
error = -1;
|
error = -1;
|
||||||
} else {
|
} else {
|
||||||
printf("\nNumber of CPUs = %d\n", ncpus);
|
printf("\nNumber of CPUs = %d\n", ncpus);
|
||||||
|
|
Loading…
Reference in New Issue