summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_flowspec_vty.c
diff options
context:
space:
mode:
authorPhilippe Guibert <philippe.guibert@6wind.com>2020-08-21 08:42:20 +0200
committerPhilippe Guibert <philippe.guibert@6wind.com>2020-08-21 13:37:08 +0200
commitc24ceb896e9b93abd8a3d03ded9a703324c56a11 (patch)
treefc8cfd61d724e6a5c3ec3ceb7fc9c78554612112 /bgpd/bgp_flowspec_vty.c
parentbgpd: remove warnings related to line too longs in bgp code (diff)
downloadfrr-c24ceb896e9b93abd8a3d03ded9a703324c56a11.tar.xz
frr-c24ceb896e9b93abd8a3d03ded9a703324c56a11.zip
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.c55
1 files changed, 26 insertions, 29 deletions
diff --git a/bgpd/bgp_flowspec_vty.c b/bgpd/bgp_flowspec_vty.c
index 92bec6f88..798bce821 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 &&