Skip to content

Commit

Permalink
NSH: Fix NSH-related length macros that cause stack overflow
Browse files Browse the repository at this point in the history
In the filed of ver_flags_ttl_len of struct nshhdr, there are only 6
bits that are used to indicate header's total length in 4-byte words.
Therefore, the max value for total is 252 (63x4), instead of 256 used
in present code base. This patch fixes it.

Reported-at: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10855
Signed-off-by: Yifeng Sun <pkusunyifeng@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
  • Loading branch information
yifsun authored and blp committed Oct 26, 2018
1 parent 4e9c96f commit e612dd2
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 4 deletions.
4 changes: 2 additions & 2 deletions datapath/linux/compat/include/net/nsh.h
Expand Up @@ -247,10 +247,10 @@ struct nshhdr {
#define NSH_M_TYPE1_LEN 24

/* NSH header maximum Length. */
#define NSH_HDR_MAX_LEN 256
#define NSH_HDR_MAX_LEN 252

/* NSH context headers maximum Length. */
#define NSH_CTX_HDRS_MAX_LEN 248
#define NSH_CTX_HDRS_MAX_LEN 244

static inline struct nshhdr *nsh_hdr(struct sk_buff *skb)
{
Expand Down
4 changes: 2 additions & 2 deletions include/openvswitch/nsh.h
Expand Up @@ -263,10 +263,10 @@ struct nsh_hdr {
#define NSH_M_TYPE1_LEN 24

/* NSH header maximum Length. */
#define NSH_HDR_MAX_LEN 256
#define NSH_HDR_MAX_LEN 252

/* NSH context headers maximum Length. */
#define NSH_CTX_HDRS_MAX_LEN 248
#define NSH_CTX_HDRS_MAX_LEN 244

static inline uint16_t
nsh_hdr_len(const struct nsh_hdr *nsh)
Expand Down

0 comments on commit e612dd2

Please sign in to comment.