Skip to content

Commit 0652e35

Browse files
committed
handling exit(3) and err(3)
1 parent 726e4f3 commit 0652e35

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

sbin/ping/fuzzer_ops.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <stddef.h>
66
#include <stdint.h>
77
#include <poll.h>
8+
#include <setjmp.h>
89

910
typedef struct s_fuzzer_buffer_t {
1011
size_t len, off;
@@ -29,4 +30,8 @@ ssize_t fuzzer_sendto(int s, const void *msg, size_t len, int flags,
2930
const struct sockaddr *to, socklen_t tolen);
3031
int fuzzer_close(int s);
3132

33+
extern jmp_buf fuzzer_exit;
34+
#define exit(...) longjmp(fuzzer_exit, 1)
35+
#define err(...) longjmp(fuzzer_exit, 1)
36+
3237
#endif

sbin/ping/ping.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -749,7 +749,7 @@ int fuzzer_init(void) {
749749
}
750750

751751
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
752-
752+
jmp_buf fuzzer_exit;
753753
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
754754
buffer = Data;
755755
blen = Size;
@@ -766,6 +766,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
766766
u_char ttl = 0;
767767
u_long tos = 0;
768768

769+
if (setjmp(fuzzer_exit))
770+
return 0;
769771
if (prog_init && prog_init() == -1)
770772
return 0;
771773
if ((s = prog_socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0)

0 commit comments

Comments
 (0)