|
39 | 39 |
|
40 | 40 | #define TTY_PATH 32 |
41 | 41 | #define MAX_USER ((UT_NAMESIZE * 2) + 8) |
| 42 | +#define EXENAME_SIZE ((PATH_MAX * 2) + 1) |
42 | 43 |
|
43 | 44 | // NOTE: The kernel fills in pid, uid, and loginuid of sender. Therefore, |
44 | 45 | // these routines do not need to send them. |
@@ -179,8 +180,15 @@ static char *_get_exename(char *exename, int size) |
179 | 180 | audit_msg(LOG_ERR, "get_exename: cannot determine executable"); |
180 | 181 | } else { |
181 | 182 | tmp[res] = '\0'; |
182 | | - if (audit_value_needs_encoding(tmp, res)) |
| 183 | + if (audit_value_needs_encoding(tmp, res)) { |
| 184 | + if (((res * 2) + 1) > size) { |
| 185 | + strcpy(exename, "\"?\""); |
| 186 | + audit_msg(LOG_ERR, |
| 187 | + "get_exename: encoded executable name too long"); |
| 188 | + return exename; |
| 189 | + } |
183 | 190 | return audit_encode_value(exename, tmp, res); |
| 191 | + } |
184 | 192 | snprintf(exename, size, "\"%s\"", tmp); |
185 | 193 | } |
186 | 194 | return exename; |
@@ -294,7 +302,7 @@ int audit_log_user_message(int audit_fd, int type, const char *message, |
294 | 302 | { |
295 | 303 | char buf[MAX_AUDIT_MESSAGE_LENGTH]; |
296 | 304 | char addrbuf[INET6_ADDRSTRLEN]; |
297 | | - static char exename[PATH_MAX*2]=""; |
| 305 | + static char exename[EXENAME_SIZE]=""; |
298 | 306 | char ttyname[TTY_PATH]; |
299 | 307 | const char *success; |
300 | 308 | int ret; |
@@ -371,7 +379,7 @@ int audit_log_user_comm_message(int audit_fd, int type, const char *message, |
371 | 379 | { |
372 | 380 | char buf[MAX_AUDIT_MESSAGE_LENGTH]; |
373 | 381 | char addrbuf[INET6_ADDRSTRLEN]; |
374 | | - static char exename[PATH_MAX*2]=""; |
| 382 | + static char exename[EXENAME_SIZE]=""; |
375 | 383 | char commname[PATH_MAX*2]; |
376 | 384 | char ttyname[TTY_PATH]; |
377 | 385 | const char *success; |
@@ -456,7 +464,7 @@ int audit_log_acct_message(int audit_fd, int type, const char *pgname, |
456 | 464 | const char *success; |
457 | 465 | char buf[MAX_AUDIT_MESSAGE_LENGTH]; |
458 | 466 | char addrbuf[INET6_ADDRSTRLEN]; |
459 | | - static char exename[PATH_MAX*2] = ""; |
| 467 | + static char exename[EXENAME_SIZE] = ""; |
460 | 468 | char ttyname[TTY_PATH]; |
461 | 469 | int ret; |
462 | 470 |
|
@@ -558,7 +566,7 @@ int audit_log_user_avc_message(int audit_fd, int type, const char *message, |
558 | 566 | { |
559 | 567 | char buf[MAX_AUDIT_MESSAGE_LENGTH]; |
560 | 568 | char addrbuf[INET6_ADDRSTRLEN]; |
561 | | - static char exename[PATH_MAX*2] = ""; |
| 569 | + static char exename[EXENAME_SIZE] = ""; |
562 | 570 | char ttyname[TTY_PATH]; |
563 | 571 | int retval; |
564 | 572 |
|
@@ -639,7 +647,7 @@ int audit_log_semanage_message(int audit_fd, int type, const char *pgname, |
639 | 647 | const char *success; |
640 | 648 | char buf[MAX_AUDIT_MESSAGE_LENGTH]; |
641 | 649 | char addrbuf[INET6_ADDRSTRLEN]; |
642 | | - static char exename[PATH_MAX*2] = ""; |
| 650 | + static char exename[EXENAME_SIZE] = ""; |
643 | 651 | char ttyname[TTY_PATH]; |
644 | 652 | int ret; |
645 | 653 |
|
@@ -746,7 +754,7 @@ int audit_log_user_command(int audit_fd, int type, const char *command, |
746 | 754 | char commname[PATH_MAX*2]; |
747 | 755 | char cwdname[PATH_MAX*2]; |
748 | 756 | char ttyname[TTY_PATH]; |
749 | | - static char exename[PATH_MAX*2] = ""; |
| 757 | + static char exename[EXENAME_SIZE] = ""; |
750 | 758 | char format[64]; |
751 | 759 | const char *success; |
752 | 760 | char *cmd; |
@@ -832,4 +840,3 @@ int audit_log_user_command(int audit_fd, int type, const char *command, |
832 | 840 | errno = ret; |
833 | 841 | return ret; |
834 | 842 | } |
835 | | - |
|
0 commit comments