diff options
author | Guy Harris <guy@alum.mit.edu> | 2016-09-25 14:17:00 -0700 |
---|---|---|
committer | Francois-Xavier Le Bail <fx.lebail@yahoo.com> | 2017-01-18 09:16:39 +0100 |
commit | ea6ddc5e71988347f86c8783934fb6562e9fdb5c (patch) | |
tree | 16485e091dfb2fe02821b4698ab011f1e6192198 /parsenfsfh.c | |
parent | ed0237af69d345cd907413dcb15393717676b294 (diff) | |
download | tcpdump-ea6ddc5e71988347f86c8783934fb6562e9fdb5c.tar.gz |
Don't overflow the Opaque_Handle buffer.
The file handle length can be arbitrarily large; don't assume its hex
dump will fit in the buffer, just truncate it if it doesn't.
Diffstat (limited to 'parsenfsfh.c')
-rw-r--r-- | parsenfsfh.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/parsenfsfh.c b/parsenfsfh.c index d534ece0..43efd876 100644 --- a/parsenfsfh.c +++ b/parsenfsfh.c @@ -105,7 +105,7 @@ static int is_UCX(const unsigned char *, u_int); void -Parse_fh(register const unsigned char *fh, int len, my_fsid *fsidp, +Parse_fh(register const unsigned char *fh, u_int len, my_fsid *fsidp, uint32_t *inop, const char **osnamep, /* if non-NULL, return OS name here */ const char **fsnamep, /* if non-NULL, return server fs name here (for VMS) */ @@ -114,7 +114,7 @@ Parse_fh(register const unsigned char *fh, int len, my_fsid *fsidp, register const unsigned char *fhp = fh; uint32_t temp; int fhtype = FHT_UNKNOWN; - int i; + u_int i; /* * Require at least 16 bytes of file handle; it's variable-length @@ -422,7 +422,7 @@ Parse_fh(register const unsigned char *fh, int len, my_fsid *fsidp, (void)fprintf(stderr, "\n"); #endif /* Save the actual handle, so it can be display with -u */ - for (i = 0; i < len*4; i++) + for (i = 0; i < len*4 && i*2 < sizeof(fsidp->Opaque_Handle) - 1; i++) (void)snprintf(&(fsidp->Opaque_Handle[i*2]), 3, "%.2X", fhp[i]); /* XXX for now, give "bogus" values to aid debugging */ @@ -452,7 +452,7 @@ Parse_fh(register const unsigned char *fh, int len, my_fsid *fsidp, static int is_UCX(const unsigned char *fhp, u_int len) { - register int i; + register u_int i; int seen_null = 0; /* |