diff options
| author | Philippe Guibert <philippe.guibert@6wind.com> | 2020-08-21 08:42:20 +0200 | 
|---|---|---|
| committer | Philippe Guibert <philippe.guibert@6wind.com> | 2020-08-21 13:37:08 +0200 | 
| commit | c24ceb896e9b93abd8a3d03ded9a703324c56a11 (patch) | |
| tree | fc8cfd61d724e6a5c3ec3ceb7fc9c78554612112 /bgpd/bgp_flowspec_vty.c | |
| parent | 4371bf9110261f81edfd457a33f86cb0ce12ada7 (diff) | |
bgpd: fix Dereference of null pointer in flowspec
a dereference of null pointer exists in current flowspec code, with
prefix pointer. check validity of pointer before going ahead.
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Diffstat (limited to 'bgpd/bgp_flowspec_vty.c')
| -rw-r--r-- | bgpd/bgp_flowspec_vty.c | 55 | 
1 files changed, 26 insertions, 29 deletions
diff --git a/bgpd/bgp_flowspec_vty.c b/bgpd/bgp_flowspec_vty.c index 92bec6f88a..798bce8219 100644 --- a/bgpd/bgp_flowspec_vty.c +++ b/bgpd/bgp_flowspec_vty.c @@ -274,36 +274,33 @@ void route_vty_out_flowspec(struct vty *vty, const struct prefix *p,  		dest = path->net;  	if (dest)  		bgp_dest_get_bgp_table_info(dest); -	/* Print prefix */ -	if (p != NULL) { -		if (p->family != AF_FLOWSPEC) -			return; -		if (json_paths) { -			if (display == NLRI_STRING_FORMAT_JSON) -				json_nlri_path = json_object_new_object(); -			else -				json_nlri_path = json_paths; -		} -		if (display == NLRI_STRING_FORMAT_LARGE && path) -			vty_out(vty, "BGP flowspec entry: (flags 0x%x)\n", -				path->flags); -		bgp_fs_nlri_get_string((unsigned char *) -				       p->u.prefix_flowspec.ptr, -				       p->u.prefix_flowspec.prefixlen, -				       return_string, -				       display, -				       json_nlri_path, -				       family2afi(p->u.prefix_flowspec -						  .family)); -		if (display == NLRI_STRING_FORMAT_LARGE) -			vty_out(vty, "%s", return_string); -		else if (display == NLRI_STRING_FORMAT_DEBUG) -			vty_out(vty, "%s", return_string); -		else if (display == NLRI_STRING_FORMAT_MIN) -			vty_out(vty, " %-30s", return_string); -		else if (json_paths && display == NLRI_STRING_FORMAT_JSON) -			json_object_array_add(json_paths, json_nlri_path); +	if (p == NULL || p->family != AF_FLOWSPEC) +		return; +	if (json_paths) { +		if (display == NLRI_STRING_FORMAT_JSON) +			json_nlri_path = json_object_new_object(); +		else +			json_nlri_path = json_paths;  	} +	if (display == NLRI_STRING_FORMAT_LARGE && path) +		vty_out(vty, "BGP flowspec entry: (flags 0x%x)\n", +			path->flags); +	bgp_fs_nlri_get_string((unsigned char *) +			       p->u.prefix_flowspec.ptr, +			       p->u.prefix_flowspec.prefixlen, +			       return_string, +			       display, +			       json_nlri_path, +			       family2afi(p->u.prefix_flowspec +					  .family)); +	if (display == NLRI_STRING_FORMAT_LARGE) +		vty_out(vty, "%s", return_string); +	else if (display == NLRI_STRING_FORMAT_DEBUG) +		vty_out(vty, "%s", return_string); +	else if (display == NLRI_STRING_FORMAT_MIN) +		vty_out(vty, " %-30s", return_string); +	else if (json_paths && display == NLRI_STRING_FORMAT_JSON) +		json_object_array_add(json_paths, json_nlri_path);  	if (!path)  		return;  	if (path->attr &&  | 
