Skip to content

Commit

Permalink
ACPI: tools: pfrut: Check if the input of level and type is in the ri…
Browse files Browse the repository at this point in the history
…ght numeric range

The user provides arbitrary non-numeic value to level and type,
which could bring unexpected behavior. In this case the expected
behavior would be to throw an error.

 pfrut -h
usage: pfrut [OPTIONS]
code injection:
-l, --load
-s, --stage
-a, --activate
-u, --update [stage and activate]
-q, --query
-d, --revid
update telemetry:
-G, --getloginfo
-T, --type(0:execution, 1:history)
-L, --level(0, 1, 2, 4)
-R, --read
-D, --revid log

 pfrut -T A
 pfrut -G
log_level:0
log_type:0
log_revid:2
max_data_size:65536
chunk1_size:0
chunk2_size:1530
rollover_cnt:0
reset_cnt:17

Fix this by restricting the input to be in the expected range.

Reported-by: Hariganesh Govindarajulu <[email protected]>
Suggested-by: "Rafael J. Wysocki" <[email protected]>
Signed-off-by: Chen Yu <[email protected]>
Signed-off-by: Rafael J. Wysocki <[email protected]>
  • Loading branch information
yu-chen-surf authored and rafaeljw committed Mar 14, 2023
1 parent eeac8ed commit 0bc23d8
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions tools/power/acpi/tools/pfrut/pfrut.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ static struct option long_options[] = {
static void parse_options(int argc, char **argv)
{
int option_index = 0;
char *pathname;
char *pathname, *endptr;
int opt;

pathname = strdup(argv[0]);
Expand Down Expand Up @@ -125,11 +125,23 @@ static void parse_options(int argc, char **argv)
log_getinfo = 1;
break;
case 'T':
log_type = atoi(optarg);
log_type = strtol(optarg, &endptr, 0);
if (*endptr || (log_type != 0 && log_type != 1)) {
printf("Number expected: type(0:execution, 1:history) - Quit.\n");
exit(1);
}

set_log_type = 1;
break;
case 'L':
log_level = atoi(optarg);
log_level = strtol(optarg, &endptr, 0);
if (*endptr ||
(log_level != 0 && log_level != 1 &&
log_level != 2 && log_level != 4)) {
printf("Number expected: level(0, 1, 2, 4) - Quit.\n");
exit(1);
}

set_log_level = 1;
break;
case 'R':
Expand Down

0 comments on commit 0bc23d8

Please sign in to comment.