diff mbox series

[meta-networking] frr: upgrade 9.0.1 -> 9.1

Message ID 1701159483-27786-1-git-send-email-wangmy@fujitsu.com
State Accepted
Headers show
Series [meta-networking] frr: upgrade 9.0.1 -> 9.1 | expand

Commit Message

Mingyu Wang (Fujitsu) Nov. 28, 2023, 8:18 a.m. UTC
From: Wang Mingyu <wangmy@fujitsu.com>

0001-tools-make-quiet-actually-suppress-output.patch
CVE-2023-46752.patch
CVE-2023-46753.patch
CVE-2023-47234.patch
CVE-2023-47235.patch
removed since they're included in 9.1

Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
---
 ...-make-quiet-actually-suppress-output.patch |  58 --------
 .../frr/frr/CVE-2023-46752.patch              | 125 ------------------
 .../frr/frr/CVE-2023-46753.patch              | 117 ----------------
 .../frr/frr/CVE-2023-47234.patch              |  95 -------------
 .../frr/frr/CVE-2023-47235.patch              | 112 ----------------
 .../frr/{frr_9.0.1.bb => frr_9.1.bb}          |   9 +-
 6 files changed, 2 insertions(+), 514 deletions(-)
 delete mode 100644 meta-networking/recipes-protocols/frr/frr/0001-tools-make-quiet-actually-suppress-output.patch
 delete mode 100644 meta-networking/recipes-protocols/frr/frr/CVE-2023-46752.patch
 delete mode 100644 meta-networking/recipes-protocols/frr/frr/CVE-2023-46753.patch
 delete mode 100644 meta-networking/recipes-protocols/frr/frr/CVE-2023-47234.patch
 delete mode 100644 meta-networking/recipes-protocols/frr/frr/CVE-2023-47235.patch
 rename meta-networking/recipes-protocols/frr/{frr_9.0.1.bb => frr_9.1.bb} (94%)

Comments

Khem Raj Nov. 28, 2023, 5:02 p.m. UTC | #1
On Tue, Nov 28, 2023 at 12:18 AM wangmy <wangmy@fujitsu.com> wrote:
>
> From: Wang Mingyu <wangmy@fujitsu.com>
>
> 0001-tools-make-quiet-actually-suppress-output.patch
> CVE-2023-46752.patch
> CVE-2023-46753.patch
> CVE-2023-47234.patch
> CVE-2023-47235.patch
> removed since they're included in 9.1
>
> Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
> ---
>  ...-make-quiet-actually-suppress-output.patch |  58 --------
>  .../frr/frr/CVE-2023-46752.patch              | 125 ------------------
>  .../frr/frr/CVE-2023-46753.patch              | 117 ----------------
>  .../frr/frr/CVE-2023-47234.patch              |  95 -------------
>  .../frr/frr/CVE-2023-47235.patch              | 112 ----------------
>  .../frr/{frr_9.0.1.bb => frr_9.1.bb}          |   9 +-
>  6 files changed, 2 insertions(+), 514 deletions(-)
>  delete mode 100644 meta-networking/recipes-protocols/frr/frr/0001-tools-make-quiet-actually-suppress-output.patch
>  delete mode 100644 meta-networking/recipes-protocols/frr/frr/CVE-2023-46752.patch
>  delete mode 100644 meta-networking/recipes-protocols/frr/frr/CVE-2023-46753.patch
>  delete mode 100644 meta-networking/recipes-protocols/frr/frr/CVE-2023-47234.patch
>  delete mode 100644 meta-networking/recipes-protocols/frr/frr/CVE-2023-47235.patch
>  rename meta-networking/recipes-protocols/frr/{frr_9.0.1.bb => frr_9.1.bb} (94%)
>
> diff --git a/meta-networking/recipes-protocols/frr/frr/0001-tools-make-quiet-actually-suppress-output.patch b/meta-networking/recipes-protocols/frr/frr/0001-tools-make-quiet-actually-suppress-output.patch
> deleted file mode 100644
> index 3e93cf3c4..000000000
> --- a/meta-networking/recipes-protocols/frr/frr/0001-tools-make-quiet-actually-suppress-output.patch
> +++ /dev/null
> @@ -1,58 +0,0 @@
> -From 312d5ee1592f8c5b616d330233d1de2643f759e2 Mon Sep 17 00:00:00 2001
> -From: Jonas Gorski <jonas.gorski@bisdn.de>
> -Date: Thu, 14 Sep 2023 17:04:16 +0200
> -Subject: [PATCH] tools: make --quiet actually suppress output
> -
> -When calling daemon_stop() with --quiet and e.g. the pidfile is empty,
> -it won't return early since while "$fail" is set, "$2" is "--quiet", so
> -the if condition isn't met and it will continue executing, resulting
> -in error messages in the log:
> -
> -> Sep 14 14:48:33 localhost watchfrr[2085]: [YFT0P-5Q5YX] Forked background command [pid 2086]: /usr/lib/frr/watchfrr.sh restart all
> -> Sep 14 14:48:33 localhost frrinit.sh[2075]: /usr/lib/frr/frrcommon.sh: line 216: kill: `': not a pid or valid job spec
> -> Sep 14 14:48:33 localhost frrinit.sh[2075]: /usr/lib/frr/frrcommon.sh: line 216: kill: `': not a pid or valid job spec
> -> Sep 14 14:48:33 localhost frrinit.sh[2075]: /usr/lib/frr/frrcommon.sh: line 216: kill: `': not a pid or valid job spec
> -
> -Fix this by moving the --quiet check into the block to log_failure_msg(),
> -and also add the check to all other invocations of log_*_msg() to make
> ---quiet properly suppress output.
> -
> -Fixes: 19a99d89f088 ("tools: suppress unuseful warnings during restarting frr")
> -Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
> -Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/312d5ee1592f8c5b616d330233d1de2643f759e2]
> ----
> - tools/frrcommon.sh.in | 8 ++++----
> - 1 file changed, 4 insertions(+), 4 deletions(-)
> -
> -diff --git a/tools/frrcommon.sh.in b/tools/frrcommon.sh.in
> -index f1f70119097e..00b63a78e2bc 100755
> ---- a/tools/frrcommon.sh.in
> -+++ b/tools/frrcommon.sh.in
> -@@ -207,8 +207,8 @@ daemon_stop() {
> -       [ -z "$fail" -a -z "$pid" ] && fail="pid file is empty"
> -       [ -n "$fail" ] || kill -0 "$pid" 2>/dev/null || fail="pid $pid not running"
> -
> --      if [ -n "$fail" ] && [ "$2" != "--quiet" ]; then
> --              log_failure_msg "Cannot stop $dmninst: $fail"
> -+      if [ -n "$fail" ]; then
> -+              [ "$2" = "--quiet" ] || log_failure_msg "Cannot stop $dmninst: $fail"
> -               return 1
> -       fi
> -
> -@@ -220,11 +220,11 @@ daemon_stop() {
> -               [ $(( cnt -= 1 )) -gt 0 ] || break
> -       done
> -       if kill -0 "$pid" 2>/dev/null; then
> --              log_failure_msg "Failed to stop $dmninst, pid $pid still running"
> -+              [ "$2" = "--quiet" ] || log_failure_msg "Failed to stop $dmninst, pid $pid still running"
> -               still_running=1
> -               return 1
> -       else
> --              log_success_msg "Stopped $dmninst"
> -+              [ "$2" = "--quiet" ] || log_success_msg "Stopped $dmninst"
> -               rm -f "$pidfile"
> -               return 0
> -       fi
> ---
> -2.42.0
> -
> diff --git a/meta-networking/recipes-protocols/frr/frr/CVE-2023-46752.patch b/meta-networking/recipes-protocols/frr/frr/CVE-2023-46752.patch
> deleted file mode 100644
> index e1f30248c..000000000
> --- a/meta-networking/recipes-protocols/frr/frr/CVE-2023-46752.patch
> +++ /dev/null
> @@ -1,125 +0,0 @@
> -From b08afc81c60607a4f736f418f2e3eb06087f1a35 Mon Sep 17 00:00:00 2001
> -From: Donatas Abraitis <donatas@opensourcerouting.org>
> -Date: Fri, 20 Oct 2023 17:49:18 +0300
> -Subject: [PATCH] bgpd: Handle MP_REACH_NLRI malformed packets with session
> - reset
> -
> -Avoid crashing bgpd.
> -
> -```
> -(gdb)
> -bgp_mp_reach_parse (args=<optimized out>, mp_update=0x7fffffffe140) at bgpd/bgp_attr.c:2341
> -2341                   stream_get(&attr->mp_nexthop_global, s, IPV6_MAX_BYTELEN);
> -(gdb)
> -stream_get (dst=0x7fffffffe1ac, s=0x7ffff0006e80, size=16) at lib/stream.c:320
> -320    {
> -(gdb)
> -321            STREAM_VERIFY_SANE(s);
> -(gdb)
> -323            if (STREAM_READABLE(s) < size) {
> -(gdb)
> -34       return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
> -(gdb)
> -
> -Thread 1 "bgpd" received signal SIGSEGV, Segmentation fault.
> -0x00005555556e37be in route_set_aspath_prepend (rule=0x555555aac0d0, prefix=0x7fffffffe050,
> -    object=0x7fffffffdb00) at bgpd/bgp_routemap.c:2282
> -2282           if (path->attr->aspath->refcnt)
> -(gdb)
> -```
> -
> -With the configuration:
> -
> -```
> - neighbor 127.0.0.1 remote-as external
> - neighbor 127.0.0.1 passive
> - neighbor 127.0.0.1 ebgp-multihop
> - neighbor 127.0.0.1 disable-connected-check
> - neighbor 127.0.0.1 update-source 127.0.0.2
> - neighbor 127.0.0.1 timers 3 90
> - neighbor 127.0.0.1 timers connect 1
> - address-family ipv4 unicast
> -  redistribute connected
> -  neighbor 127.0.0.1 default-originate
> -  neighbor 127.0.0.1 route-map RM_IN in
> - exit-address-family
> -!
> -route-map RM_IN permit 10
> - set as-path prepend 200
> -exit
> -```
> -
> -Reported-by: Iggy Frankovic <iggyfran@amazon.com>
> -Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
> -Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/b08afc81c60607a4f736f418f2e3eb06087f1a35]
> -CVE: CVE-2023-46752
> -Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
> ----
> - bgpd/bgp_attr.c   | 6 +-----
> - bgpd/bgp_attr.h   | 1 -
> - bgpd/bgp_packet.c | 6 +-----
> - 3 files changed, 2 insertions(+), 11 deletions(-)
> -
> -diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
> -index 6925aff727e2..e7bb42a5d989 100644
> ---- a/bgpd/bgp_attr.c
> -+++ b/bgpd/bgp_attr.c
> -@@ -2421,7 +2421,7 @@ int bgp_mp_reach_parse(struct bgp_attr_parser_args *args,
> -
> -               mp_update->afi = afi;
> -               mp_update->safi = safi;
> --              return BGP_ATTR_PARSE_EOR;
> -+              return bgp_attr_malformed(args, BGP_NOTIFY_UPDATE_MAL_ATTR, 0);
> -       }
> -
> -       mp_update->afi = afi;
> -@@ -3759,10 +3759,6 @@ enum bgp_attr_parse_ret bgp_attr_parse(struct peer *peer, struct attr *attr,
> -                       goto done;
> -               }
> -
> --              if (ret == BGP_ATTR_PARSE_EOR) {
> --                      goto done;
> --              }
> --
> -               if (ret == BGP_ATTR_PARSE_ERROR) {
> -                       flog_warn(EC_BGP_ATTRIBUTE_PARSE_ERROR,
> -                                 "%s: Attribute %s, parse error", peer->host,
> -diff --git a/bgpd/bgp_attr.h b/bgpd/bgp_attr.h
> -index 961e5f122470..fc347e7a1b4b 100644
> ---- a/bgpd/bgp_attr.h
> -+++ b/bgpd/bgp_attr.h
> -@@ -364,7 +364,6 @@ enum bgp_attr_parse_ret {
> -       /* only used internally, send notify + convert to BGP_ATTR_PARSE_ERROR
> -        */
> -       BGP_ATTR_PARSE_ERROR_NOTIFYPLS = -3,
> --      BGP_ATTR_PARSE_EOR = -4,
> - };
> -
> - struct bpacket_attr_vec_arr;
> -diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
> -index b585591e2f69..5ecf343b6657 100644
> ---- a/bgpd/bgp_packet.c
> -+++ b/bgpd/bgp_packet.c
> -@@ -2397,8 +2397,7 @@ static int bgp_update_receive(struct peer_connection *connection,
> -        * Non-MP IPv4/Unicast EoR is a completely empty UPDATE
> -        * and MP EoR should have only an empty MP_UNREACH
> -        */
> --      if ((!update_len && !withdraw_len && nlris[NLRI_MP_UPDATE].length == 0)
> --          || (attr_parse_ret == BGP_ATTR_PARSE_EOR)) {
> -+      if (!update_len && !withdraw_len && nlris[NLRI_MP_UPDATE].length == 0) {
> -               afi_t afi = 0;
> -               safi_t safi;
> -               struct graceful_restart_info *gr_info;
> -@@ -2419,9 +2418,6 @@ static int bgp_update_receive(struct peer_connection *connection,
> -                          && nlris[NLRI_MP_WITHDRAW].length == 0) {
> -                       afi = nlris[NLRI_MP_WITHDRAW].afi;
> -                       safi = nlris[NLRI_MP_WITHDRAW].safi;
> --              } else if (attr_parse_ret == BGP_ATTR_PARSE_EOR) {
> --                      afi = nlris[NLRI_MP_UPDATE].afi;
> --                      safi = nlris[NLRI_MP_UPDATE].safi;
> -               }
> -
> -               if (afi && peer->afc[afi][safi]) {
> ---
> -2.42.1
> -
> diff --git a/meta-networking/recipes-protocols/frr/frr/CVE-2023-46753.patch b/meta-networking/recipes-protocols/frr/frr/CVE-2023-46753.patch
> deleted file mode 100644
> index 6bf159aba..000000000
> --- a/meta-networking/recipes-protocols/frr/frr/CVE-2023-46753.patch
> +++ /dev/null
> @@ -1,117 +0,0 @@
> -From d8482bf011cb2b173e85b65b4bf3d5061250cdb9 Mon Sep 17 00:00:00 2001
> -From: Donatas Abraitis <donatas@opensourcerouting.org>
> -Date: Mon, 23 Oct 2023 23:34:10 +0300
> -Subject: [PATCH] bgpd: Check mandatory attributes more carefully for UPDATE
> - message
> -
> -If we send a crafted BGP UPDATE message without mandatory attributes, we do
> -not check if the length of the path attributes is zero or not. We only check
> -if attr->flag is at least set or not. Imagine we send only unknown transit
> -attribute, then attr->flag is always 0. Also, this is true only if graceful-restart
> -capability is received.
> -
> -A crash:
> -
> -```
> -bgpd[7834]: [TJ23Y-GY0RH] 127.0.0.1 Unknown attribute is received (type 31, length 16)
> -bgpd[7834]: [PCFFM-WMARW] 127.0.0.1(donatas-pc) rcvd UPDATE wlen 0 attrlen 20 alen 17
> -BGP[7834]: Received signal 11 at 1698089639 (si_addr 0x0, PC 0x55eefd375b4a); aborting...
> -BGP[7834]: /usr/local/lib/libfrr.so.0(zlog_backtrace_sigsafe+0x6d) [0x7f3205ca939d]
> -BGP[7834]: /usr/local/lib/libfrr.so.0(zlog_signal+0xf3) [0x7f3205ca9593]
> -BGP[7834]: /usr/local/lib/libfrr.so.0(+0xf5181) [0x7f3205cdd181]
> -BGP[7834]: /lib/x86_64-linux-gnu/libpthread.so.0(+0x12980) [0x7f3204ff3980]
> -BGP[7834]: /usr/lib/frr/bgpd(+0x18ab4a) [0x55eefd375b4a]
> -BGP[7834]: /usr/local/lib/libfrr.so.0(route_map_apply_ext+0x310) [0x7f3205cd1290]
> -BGP[7834]: /usr/lib/frr/bgpd(+0x163610) [0x55eefd34e610]
> -BGP[7834]: /usr/lib/frr/bgpd(bgp_update+0x9a5) [0x55eefd35c1d5]
> -BGP[7834]: /usr/lib/frr/bgpd(bgp_nlri_parse_ip+0xb7) [0x55eefd35e867]
> -BGP[7834]: /usr/lib/frr/bgpd(+0x1555e6) [0x55eefd3405e6]
> -BGP[7834]: /usr/lib/frr/bgpd(bgp_process_packet+0x747) [0x55eefd345597]
> -BGP[7834]: /usr/local/lib/libfrr.so.0(event_call+0x83) [0x7f3205cef4a3]
> -BGP[7834]: /usr/local/lib/libfrr.so.0(frr_run+0xc0) [0x7f3205ca10a0]
> -BGP[7834]: /usr/lib/frr/bgpd(main+0x409) [0x55eefd2dc979]
> -```
> -
> -Sending:
> -
> -```
> -import socket
> -import time
> -
> -OPEN = (b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
> -b"\xff\xff\x00\x62\x01\x04\xfd\xea\x00\x5a\x0a\x00\x00\x01\x45\x02"
> -b"\x06\x01\x04\x00\x01\x00\x01\x02\x02\x02\x00\x02\x02\x46\x00\x02"
> -b"\x06\x41\x04\x00\x00\xfd\xea\x02\x02\x06\x00\x02\x06\x45\x04\x00"
> -b"\x01\x01\x03\x02\x0e\x49\x0c\x0a\x64\x6f\x6e\x61\x74\x61\x73\x2d"
> -b"\x70\x63\x00\x02\x04\x40\x02\x00\x78\x02\x09\x47\x07\x00\x01\x01"
> -b"\x80\x00\x00\x00")
> -
> -KEEPALIVE = (b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
> -b"\xff\xff\xff\xff\xff\xff\x00\x13\x04")
> -
> -UPDATE = bytearray.fromhex("ffffffffffffffffffffffffffffffff003c0200000014ff1f001000040146464646460004464646464646664646f50d05800100010200ffff000000")
> -
> -s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> -s.connect(('127.0.0.2', 179))
> -s.send(OPEN)
> -data = s.recv(1024)
> -s.send(KEEPALIVE)
> -data = s.recv(1024)
> -s.send(UPDATE)
> -data = s.recv(1024)
> -time.sleep(1000)
> -s.close()
> -```
> -
> -Reported-by: Iggy Frankovic <iggyfran@amazon.com>
> -Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
> -Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/d8482bf011cb2b173e85b65b4bf3d5061250cdb9]
> -CVE: CVE-2023-46753
> -Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
> ----
> - bgpd/bgp_attr.c | 10 ++++++----
> - 1 file changed, 6 insertions(+), 4 deletions(-)
> -
> -diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
> -index e7bb42a5d989..cf2dbe65b805 100644
> ---- a/bgpd/bgp_attr.c
> -+++ b/bgpd/bgp_attr.c
> -@@ -3385,13 +3385,15 @@ bgp_attr_unknown(struct bgp_attr_parser_args *args)
> - }
> -
> - /* Well-known attribute check. */
> --static int bgp_attr_check(struct peer *peer, struct attr *attr)
> -+static int bgp_attr_check(struct peer *peer, struct attr *attr,
> -+                        bgp_size_t length)
> - {
> -       uint8_t type = 0;
> -
> -       /* BGP Graceful-Restart End-of-RIB for IPv4 unicast is signaled as an
> -        * empty UPDATE.  */
> --      if (CHECK_FLAG(peer->cap, PEER_CAP_RESTART_RCV) && !attr->flag)
> -+      if (CHECK_FLAG(peer->cap, PEER_CAP_RESTART_RCV) && !attr->flag &&
> -+          !length)
> -               return BGP_ATTR_PARSE_PROCEED;
> -
> -       /* "An UPDATE message that contains the MP_UNREACH_NLRI is not required
> -@@ -3443,7 +3445,7 @@ enum bgp_attr_parse_ret bgp_attr_parse(struct peer *peer, struct attr *attr,
> -       enum bgp_attr_parse_ret ret;
> -       uint8_t flag = 0;
> -       uint8_t type = 0;
> --      bgp_size_t length;
> -+      bgp_size_t length = 0;
> -       uint8_t *startp, *endp;
> -       uint8_t *attr_endp;
> -       uint8_t seen[BGP_ATTR_BITMAP_SIZE];
> -@@ -3831,7 +3833,7 @@ enum bgp_attr_parse_ret bgp_attr_parse(struct peer *peer, struct attr *attr,
> -       }
> -
> -       /* Check all mandatory well-known attributes are present */
> --      ret = bgp_attr_check(peer, attr);
> -+      ret = bgp_attr_check(peer, attr, length);
> -       if (ret < 0)
> -               goto done;
> -
> ---
> -2.42.1
> -
> diff --git a/meta-networking/recipes-protocols/frr/frr/CVE-2023-47234.patch b/meta-networking/recipes-protocols/frr/frr/CVE-2023-47234.patch
> deleted file mode 100644
> index 754f9345a..000000000
> --- a/meta-networking/recipes-protocols/frr/frr/CVE-2023-47234.patch
> +++ /dev/null
> @@ -1,95 +0,0 @@
> -From c37119df45bbf4ef713bc10475af2ee06e12f3bf Mon Sep 17 00:00:00 2001
> -From: Donatas Abraitis <donatas@opensourcerouting.org>
> -Date: Sun, 29 Oct 2023 22:44:45 +0200
> -Subject: [PATCH] bgpd: Ignore handling NLRIs if we received MP_UNREACH_NLRI
> -
> -If we receive MP_UNREACH_NLRI, we should stop handling remaining NLRIs if
> -no mandatory path attributes received.
> -
> -In other words, if MP_UNREACH_NLRI received, the remaining NLRIs should be handled
> -as a new data, but without mandatory attributes, it's a malformed packet.
> -
> -In normal case, this MUST not happen at all, but to avoid crashing bgpd, we MUST
> -handle that.
> -
> -Reported-by: Iggy Frankovic <iggyfran@amazon.com>
> -Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
> -Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/c37119df45bbf4ef713bc10475af2ee06e12f3bf]
> -CVE: CVE-2023-47234
> -Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
> ----
> - bgpd/bgp_attr.c   | 19 ++++++++++---------
> - bgpd/bgp_attr.h   |  1 +
> - bgpd/bgp_packet.c |  7 ++++++-
> - 3 files changed, 17 insertions(+), 10 deletions(-)
> -
> -diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
> -index 1473dc772502..75aa2ac7cce6 100644
> ---- a/bgpd/bgp_attr.c
> -+++ b/bgpd/bgp_attr.c
> -@@ -3399,15 +3399,6 @@ static int bgp_attr_check(struct peer *peer, struct attr *attr,
> -           !length)
> -               return BGP_ATTR_PARSE_WITHDRAW;
> -
> --      /* "An UPDATE message that contains the MP_UNREACH_NLRI is not required
> --         to carry any other path attributes.", though if MP_REACH_NLRI or NLRI
> --         are present, it should.  Check for any other attribute being present
> --         instead.
> --       */
> --      if ((!CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_MP_REACH_NLRI)) &&
> --           CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_MP_UNREACH_NLRI))))
> --              return BGP_ATTR_PARSE_PROCEED;
> --
> -       if (!CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_ORIGIN)))
> -               type = BGP_ATTR_ORIGIN;
> -
> -@@ -3426,6 +3417,16 @@ static int bgp_attr_check(struct peer *peer, struct attr *attr,
> -           && !CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_LOCAL_PREF)))
> -               type = BGP_ATTR_LOCAL_PREF;
> -
> -+      /* An UPDATE message that contains the MP_UNREACH_NLRI is not required
> -+       * to carry any other path attributes. Though if MP_REACH_NLRI or NLRI
> -+       * are present, it should. Check for any other attribute being present
> -+       * instead.
> -+       */
> -+      if (!CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_MP_REACH_NLRI)) &&
> -+          CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_MP_UNREACH_NLRI)))
> -+              return type ? BGP_ATTR_PARSE_MISSING_MANDATORY
> -+                          : BGP_ATTR_PARSE_PROCEED;
> -+
> -       /* If any of the well-known mandatory attributes are not present
> -        * in an UPDATE message, then "treat-as-withdraw" MUST be used.
> -        */
> -diff --git a/bgpd/bgp_attr.h b/bgpd/bgp_attr.h
> -index fc347e7a1b4b..d30155e6dba0 100644
> ---- a/bgpd/bgp_attr.h
> -+++ b/bgpd/bgp_attr.h
> -@@ -364,6 +364,7 @@ enum bgp_attr_parse_ret {
> -       /* only used internally, send notify + convert to BGP_ATTR_PARSE_ERROR
> -        */
> -       BGP_ATTR_PARSE_ERROR_NOTIFYPLS = -3,
> -+      BGP_ATTR_PARSE_MISSING_MANDATORY = -4,
> - };
> -
> - struct bpacket_attr_vec_arr;
> -diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
> -index a7514a26aa64..5dc35157ebf6 100644
> ---- a/bgpd/bgp_packet.c
> -+++ b/bgpd/bgp_packet.c
> -@@ -2359,7 +2359,12 @@ static int bgp_update_receive(struct peer_connection *connection,
> -       /* Network Layer Reachability Information. */
> -       update_len = end - stream_pnt(s);
> -
> --      if (update_len && attribute_len) {
> -+      /* If we received MP_UNREACH_NLRI attribute, but also NLRIs, then
> -+       * NLRIs should be handled as a new data. Though, if we received
> -+       * NLRIs without mandatory attributes, they should be ignored.
> -+       */
> -+      if (update_len && attribute_len &&
> -+          attr_parse_ret != BGP_ATTR_PARSE_MISSING_MANDATORY) {
> -               /* Set NLRI portion to structure. */
> -               nlris[NLRI_UPDATE].afi = AFI_IP;
> -               nlris[NLRI_UPDATE].safi = SAFI_UNICAST;
> ---
> -2.42.1
> -
> diff --git a/meta-networking/recipes-protocols/frr/frr/CVE-2023-47235.patch b/meta-networking/recipes-protocols/frr/frr/CVE-2023-47235.patch
> deleted file mode 100644
> index b06ba94a3..000000000
> --- a/meta-networking/recipes-protocols/frr/frr/CVE-2023-47235.patch
> +++ /dev/null
> @@ -1,112 +0,0 @@
> -From 6814f2e0138a6ea5e1f83bdd9085d9a77999900b Mon Sep 17 00:00:00 2001
> -From: Donatas Abraitis <donatas@opensourcerouting.org>
> -Date: Fri, 27 Oct 2023 11:56:45 +0300
> -Subject: [PATCH] bgpd: Treat EOR as withdrawn to avoid unwanted handling of
> - malformed attrs
> -
> -Treat-as-withdraw, otherwise if we just ignore it, we will pass it to be
> -processed as a normal UPDATE without mandatory attributes, that could lead
> -to harmful behavior. In this case, a crash for route-maps with the configuration
> -such as:
> -
> -```
> -router bgp 65001
> - no bgp ebgp-requires-policy
> - neighbor 127.0.0.1 remote-as external
> - neighbor 127.0.0.1 passive
> - neighbor 127.0.0.1 ebgp-multihop
> - neighbor 127.0.0.1 disable-connected-check
> - neighbor 127.0.0.1 update-source 127.0.0.2
> - neighbor 127.0.0.1 timers 3 90
> - neighbor 127.0.0.1 timers connect 1
> - !
> - address-family ipv4 unicast
> -  neighbor 127.0.0.1 addpath-tx-all-paths
> -  neighbor 127.0.0.1 default-originate
> -  neighbor 127.0.0.1 route-map RM_IN in
> - exit-address-family
> -exit
> -!
> -route-map RM_IN permit 10
> - set as-path prepend 200
> -exit
> -```
> -
> -Send a malformed optional transitive attribute:
> -
> -```
> -import socket
> -import time
> -
> -OPEN = (b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
> -b"\xff\xff\x00\x62\x01\x04\xfd\xea\x00\x5a\x0a\x00\x00\x01\x45\x02"
> -b"\x06\x01\x04\x00\x01\x00\x01\x02\x02\x02\x00\x02\x02\x46\x00\x02"
> -b"\x06\x41\x04\x00\x00\xfd\xea\x02\x02\x06\x00\x02\x06\x45\x04\x00"
> -b"\x01\x01\x03\x02\x0e\x49\x0c\x0a\x64\x6f\x6e\x61\x74\x61\x73\x2d"
> -b"\x70\x63\x00\x02\x04\x40\x02\x00\x78\x02\x09\x47\x07\x00\x01\x01"
> -b"\x80\x00\x00\x00")
> -
> -KEEPALIVE = (b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
> -b"\xff\xff\xff\xff\xff\xff\x00\x13\x04")
> -
> -UPDATE = bytearray.fromhex("ffffffffffffffffffffffffffffffff002b0200000003c0ff00010100eb00ac100b0b001ad908ac100b0b")
> -
> -s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> -s.connect(('127.0.0.2', 179))
> -s.send(OPEN)
> -data = s.recv(1024)
> -s.send(KEEPALIVE)
> -data = s.recv(1024)
> -s.send(UPDATE)
> -data = s.recv(1024)
> -time.sleep(100)
> -s.close()
> -```
> -
> -Reported-by: Iggy Frankovic <iggyfran@amazon.com>
> -Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
> -Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/6814f2e0138a6ea5e1f83bdd9085d9a77999900b]
> -CVE: CVE-2023-47235
> -Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
> ----
> - bgpd/bgp_attr.c | 15 ++++++++++++---
> - 1 file changed, 12 insertions(+), 3 deletions(-)
> -
> -diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
> -index cf2dbe65b805..1473dc772502 100644
> ---- a/bgpd/bgp_attr.c
> -+++ b/bgpd/bgp_attr.c
> -@@ -3391,10 +3391,13 @@ static int bgp_attr_check(struct peer *peer, struct attr *attr,
> -       uint8_t type = 0;
> -
> -       /* BGP Graceful-Restart End-of-RIB for IPv4 unicast is signaled as an
> --       * empty UPDATE.  */
> -+       * empty UPDATE. Treat-as-withdraw, otherwise if we just ignore it,
> -+       * we will pass it to be processed as a normal UPDATE without mandatory
> -+       * attributes, that could lead to harmful behavior.
> -+       */
> -       if (CHECK_FLAG(peer->cap, PEER_CAP_RESTART_RCV) && !attr->flag &&
> -           !length)
> --              return BGP_ATTR_PARSE_PROCEED;
> -+              return BGP_ATTR_PARSE_WITHDRAW;
> -
> -       /* "An UPDATE message that contains the MP_UNREACH_NLRI is not required
> -          to carry any other path attributes.", though if MP_REACH_NLRI or NLRI
> -@@ -3889,7 +3892,13 @@ done:
> -       aspath_unintern(&as4_path);
> -
> -       transit = bgp_attr_get_transit(attr);
> --      if (ret != BGP_ATTR_PARSE_ERROR) {
> -+      /* If we received an UPDATE with mandatory attributes, then
> -+       * the unrecognized transitive optional attribute of that
> -+       * path MUST be passed. Otherwise, it's an error, and from
> -+       * security perspective it might be very harmful if we continue
> -+       * here with the unrecognized attributes.
> -+       */
> -+      if (ret == BGP_ATTR_PARSE_PROCEED) {
> -               /* Finally intern unknown attribute. */
> -               if (transit)
> -                       bgp_attr_set_transit(attr, transit_intern(transit));
> ---
> -2.42.1
> -
> diff --git a/meta-networking/recipes-protocols/frr/frr_9.0.1.bb b/meta-networking/recipes-protocols/frr/frr_9.1.bb
> similarity index 94%
> rename from meta-networking/recipes-protocols/frr/frr_9.0.1.bb
> rename to meta-networking/recipes-protocols/frr/frr_9.1.bb
> index c447df051..9db6710d9 100644
> --- a/meta-networking/recipes-protocols/frr/frr_9.0.1.bb
> +++ b/meta-networking/recipes-protocols/frr/frr_9.1.bb
> @@ -11,16 +11,11 @@ LIC_FILES_CHKSUM = "file://doc/licenses/GPL-2.0;md5=b234ee4d69f5fce4486a80fdaf4a
>
>  PR = "r1"

let's use this opportunity to drop PR above while you are here.

>
> -SRC_URI = "git://github.com/FRRouting/frr.git;protocol=https;branch=stable/9.0 \
> +SRC_URI = "git://github.com/FRRouting/frr.git;protocol=https;branch=stable/9.1 \
>             file://frr.pam \
> -           file://0001-tools-make-quiet-actually-suppress-output.patch \
> -           file://CVE-2023-46752.patch \
> -           file://CVE-2023-46753.patch \
> -           file://CVE-2023-47235.patch \
> -           file://CVE-2023-47234.patch \
>             "
>
> -SRCREV = "31ed3dd753d62b5d8916998bc32814007e91364b"
> +SRCREV = "312faf8008bb4f3b9e84b8e2758cd2cbdf5742b5"
>
>  UPSTREAM_CHECK_GITTAGREGEX = "frr-(?P<pver>\d+(\.\d+)+)$"
>
> --
> 2.34.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#107072): https://lists.openembedded.org/g/openembedded-devel/message/107072
> Mute This Topic: https://lists.openembedded.org/mt/102847210/1997914
> Group Owner: openembedded-devel+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Khem Raj Nov. 28, 2023, 11:55 p.m. UTC | #2
On Tue, 28 Nov 2023 16:18:03 +0800, wangmy@fujitsu.com wrote:
> 0001-tools-make-quiet-actually-suppress-output.patch
> CVE-2023-46752.patch
> CVE-2023-46753.patch
> CVE-2023-47234.patch
> CVE-2023-47235.patch
> removed since they're included in 9.1
> 
> [...]

Applied, thanks!

[1/1] frr: upgrade 9.0.1 -> 9.1
      commit: 94f462ce829f2b66ca59dbbae2b8c66d48796ec4

Best regards,
diff mbox series

Patch

diff --git a/meta-networking/recipes-protocols/frr/frr/0001-tools-make-quiet-actually-suppress-output.patch b/meta-networking/recipes-protocols/frr/frr/0001-tools-make-quiet-actually-suppress-output.patch
deleted file mode 100644
index 3e93cf3c4..000000000
--- a/meta-networking/recipes-protocols/frr/frr/0001-tools-make-quiet-actually-suppress-output.patch
+++ /dev/null
@@ -1,58 +0,0 @@ 
-From 312d5ee1592f8c5b616d330233d1de2643f759e2 Mon Sep 17 00:00:00 2001
-From: Jonas Gorski <jonas.gorski@bisdn.de>
-Date: Thu, 14 Sep 2023 17:04:16 +0200
-Subject: [PATCH] tools: make --quiet actually suppress output
-
-When calling daemon_stop() with --quiet and e.g. the pidfile is empty,
-it won't return early since while "$fail" is set, "$2" is "--quiet", so
-the if condition isn't met and it will continue executing, resulting
-in error messages in the log:
-
-> Sep 14 14:48:33 localhost watchfrr[2085]: [YFT0P-5Q5YX] Forked background command [pid 2086]: /usr/lib/frr/watchfrr.sh restart all
-> Sep 14 14:48:33 localhost frrinit.sh[2075]: /usr/lib/frr/frrcommon.sh: line 216: kill: `': not a pid or valid job spec
-> Sep 14 14:48:33 localhost frrinit.sh[2075]: /usr/lib/frr/frrcommon.sh: line 216: kill: `': not a pid or valid job spec
-> Sep 14 14:48:33 localhost frrinit.sh[2075]: /usr/lib/frr/frrcommon.sh: line 216: kill: `': not a pid or valid job spec
-
-Fix this by moving the --quiet check into the block to log_failure_msg(),
-and also add the check to all other invocations of log_*_msg() to make
---quiet properly suppress output.
-
-Fixes: 19a99d89f088 ("tools: suppress unuseful warnings during restarting frr")
-Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
-Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/312d5ee1592f8c5b616d330233d1de2643f759e2]
----
- tools/frrcommon.sh.in | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/tools/frrcommon.sh.in b/tools/frrcommon.sh.in
-index f1f70119097e..00b63a78e2bc 100755
---- a/tools/frrcommon.sh.in
-+++ b/tools/frrcommon.sh.in
-@@ -207,8 +207,8 @@ daemon_stop() {
- 	[ -z "$fail" -a -z "$pid" ] && fail="pid file is empty"
- 	[ -n "$fail" ] || kill -0 "$pid" 2>/dev/null || fail="pid $pid not running"
- 
--	if [ -n "$fail" ] && [ "$2" != "--quiet" ]; then
--		log_failure_msg "Cannot stop $dmninst: $fail"
-+	if [ -n "$fail" ]; then
-+		[ "$2" = "--quiet" ] || log_failure_msg "Cannot stop $dmninst: $fail"
- 		return 1
- 	fi
- 
-@@ -220,11 +220,11 @@ daemon_stop() {
- 		[ $(( cnt -= 1 )) -gt 0 ] || break
- 	done
- 	if kill -0 "$pid" 2>/dev/null; then
--		log_failure_msg "Failed to stop $dmninst, pid $pid still running"
-+		[ "$2" = "--quiet" ] || log_failure_msg "Failed to stop $dmninst, pid $pid still running"
- 		still_running=1
- 		return 1
- 	else
--		log_success_msg "Stopped $dmninst"
-+		[ "$2" = "--quiet" ] || log_success_msg "Stopped $dmninst"
- 		rm -f "$pidfile"
- 		return 0
- 	fi
--- 
-2.42.0
-
diff --git a/meta-networking/recipes-protocols/frr/frr/CVE-2023-46752.patch b/meta-networking/recipes-protocols/frr/frr/CVE-2023-46752.patch
deleted file mode 100644
index e1f30248c..000000000
--- a/meta-networking/recipes-protocols/frr/frr/CVE-2023-46752.patch
+++ /dev/null
@@ -1,125 +0,0 @@ 
-From b08afc81c60607a4f736f418f2e3eb06087f1a35 Mon Sep 17 00:00:00 2001
-From: Donatas Abraitis <donatas@opensourcerouting.org>
-Date: Fri, 20 Oct 2023 17:49:18 +0300
-Subject: [PATCH] bgpd: Handle MP_REACH_NLRI malformed packets with session
- reset
-
-Avoid crashing bgpd.
-
-```
-(gdb)
-bgp_mp_reach_parse (args=<optimized out>, mp_update=0x7fffffffe140) at bgpd/bgp_attr.c:2341
-2341			stream_get(&attr->mp_nexthop_global, s, IPV6_MAX_BYTELEN);
-(gdb)
-stream_get (dst=0x7fffffffe1ac, s=0x7ffff0006e80, size=16) at lib/stream.c:320
-320	{
-(gdb)
-321		STREAM_VERIFY_SANE(s);
-(gdb)
-323		if (STREAM_READABLE(s) < size) {
-(gdb)
-34	  return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
-(gdb)
-
-Thread 1 "bgpd" received signal SIGSEGV, Segmentation fault.
-0x00005555556e37be in route_set_aspath_prepend (rule=0x555555aac0d0, prefix=0x7fffffffe050,
-    object=0x7fffffffdb00) at bgpd/bgp_routemap.c:2282
-2282		if (path->attr->aspath->refcnt)
-(gdb)
-```
-
-With the configuration:
-
-```
- neighbor 127.0.0.1 remote-as external
- neighbor 127.0.0.1 passive
- neighbor 127.0.0.1 ebgp-multihop
- neighbor 127.0.0.1 disable-connected-check
- neighbor 127.0.0.1 update-source 127.0.0.2
- neighbor 127.0.0.1 timers 3 90
- neighbor 127.0.0.1 timers connect 1
- address-family ipv4 unicast
-  redistribute connected
-  neighbor 127.0.0.1 default-originate
-  neighbor 127.0.0.1 route-map RM_IN in
- exit-address-family
-!
-route-map RM_IN permit 10
- set as-path prepend 200
-exit
-```
-
-Reported-by: Iggy Frankovic <iggyfran@amazon.com>
-Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
-Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/b08afc81c60607a4f736f418f2e3eb06087f1a35]
-CVE: CVE-2023-46752
-Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
----
- bgpd/bgp_attr.c   | 6 +-----
- bgpd/bgp_attr.h   | 1 -
- bgpd/bgp_packet.c | 6 +-----
- 3 files changed, 2 insertions(+), 11 deletions(-)
-
-diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
-index 6925aff727e2..e7bb42a5d989 100644
---- a/bgpd/bgp_attr.c
-+++ b/bgpd/bgp_attr.c
-@@ -2421,7 +2421,7 @@ int bgp_mp_reach_parse(struct bgp_attr_parser_args *args,
- 
- 		mp_update->afi = afi;
- 		mp_update->safi = safi;
--		return BGP_ATTR_PARSE_EOR;
-+		return bgp_attr_malformed(args, BGP_NOTIFY_UPDATE_MAL_ATTR, 0);
- 	}
- 
- 	mp_update->afi = afi;
-@@ -3759,10 +3759,6 @@ enum bgp_attr_parse_ret bgp_attr_parse(struct peer *peer, struct attr *attr,
- 			goto done;
- 		}
- 
--		if (ret == BGP_ATTR_PARSE_EOR) {
--			goto done;
--		}
--
- 		if (ret == BGP_ATTR_PARSE_ERROR) {
- 			flog_warn(EC_BGP_ATTRIBUTE_PARSE_ERROR,
- 				  "%s: Attribute %s, parse error", peer->host,
-diff --git a/bgpd/bgp_attr.h b/bgpd/bgp_attr.h
-index 961e5f122470..fc347e7a1b4b 100644
---- a/bgpd/bgp_attr.h
-+++ b/bgpd/bgp_attr.h
-@@ -364,7 +364,6 @@ enum bgp_attr_parse_ret {
- 	/* only used internally, send notify + convert to BGP_ATTR_PARSE_ERROR
- 	 */
- 	BGP_ATTR_PARSE_ERROR_NOTIFYPLS = -3,
--	BGP_ATTR_PARSE_EOR = -4,
- };
- 
- struct bpacket_attr_vec_arr;
-diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
-index b585591e2f69..5ecf343b6657 100644
---- a/bgpd/bgp_packet.c
-+++ b/bgpd/bgp_packet.c
-@@ -2397,8 +2397,7 @@ static int bgp_update_receive(struct peer_connection *connection,
- 	 * Non-MP IPv4/Unicast EoR is a completely empty UPDATE
- 	 * and MP EoR should have only an empty MP_UNREACH
- 	 */
--	if ((!update_len && !withdraw_len && nlris[NLRI_MP_UPDATE].length == 0)
--	    || (attr_parse_ret == BGP_ATTR_PARSE_EOR)) {
-+	if (!update_len && !withdraw_len && nlris[NLRI_MP_UPDATE].length == 0) {
- 		afi_t afi = 0;
- 		safi_t safi;
- 		struct graceful_restart_info *gr_info;
-@@ -2419,9 +2418,6 @@ static int bgp_update_receive(struct peer_connection *connection,
- 			   && nlris[NLRI_MP_WITHDRAW].length == 0) {
- 			afi = nlris[NLRI_MP_WITHDRAW].afi;
- 			safi = nlris[NLRI_MP_WITHDRAW].safi;
--		} else if (attr_parse_ret == BGP_ATTR_PARSE_EOR) {
--			afi = nlris[NLRI_MP_UPDATE].afi;
--			safi = nlris[NLRI_MP_UPDATE].safi;
- 		}
- 
- 		if (afi && peer->afc[afi][safi]) {
--- 
-2.42.1
-
diff --git a/meta-networking/recipes-protocols/frr/frr/CVE-2023-46753.patch b/meta-networking/recipes-protocols/frr/frr/CVE-2023-46753.patch
deleted file mode 100644
index 6bf159aba..000000000
--- a/meta-networking/recipes-protocols/frr/frr/CVE-2023-46753.patch
+++ /dev/null
@@ -1,117 +0,0 @@ 
-From d8482bf011cb2b173e85b65b4bf3d5061250cdb9 Mon Sep 17 00:00:00 2001
-From: Donatas Abraitis <donatas@opensourcerouting.org>
-Date: Mon, 23 Oct 2023 23:34:10 +0300
-Subject: [PATCH] bgpd: Check mandatory attributes more carefully for UPDATE
- message
-
-If we send a crafted BGP UPDATE message without mandatory attributes, we do
-not check if the length of the path attributes is zero or not. We only check
-if attr->flag is at least set or not. Imagine we send only unknown transit
-attribute, then attr->flag is always 0. Also, this is true only if graceful-restart
-capability is received.
-
-A crash:
-
-```
-bgpd[7834]: [TJ23Y-GY0RH] 127.0.0.1 Unknown attribute is received (type 31, length 16)
-bgpd[7834]: [PCFFM-WMARW] 127.0.0.1(donatas-pc) rcvd UPDATE wlen 0 attrlen 20 alen 17
-BGP[7834]: Received signal 11 at 1698089639 (si_addr 0x0, PC 0x55eefd375b4a); aborting...
-BGP[7834]: /usr/local/lib/libfrr.so.0(zlog_backtrace_sigsafe+0x6d) [0x7f3205ca939d]
-BGP[7834]: /usr/local/lib/libfrr.so.0(zlog_signal+0xf3) [0x7f3205ca9593]
-BGP[7834]: /usr/local/lib/libfrr.so.0(+0xf5181) [0x7f3205cdd181]
-BGP[7834]: /lib/x86_64-linux-gnu/libpthread.so.0(+0x12980) [0x7f3204ff3980]
-BGP[7834]: /usr/lib/frr/bgpd(+0x18ab4a) [0x55eefd375b4a]
-BGP[7834]: /usr/local/lib/libfrr.so.0(route_map_apply_ext+0x310) [0x7f3205cd1290]
-BGP[7834]: /usr/lib/frr/bgpd(+0x163610) [0x55eefd34e610]
-BGP[7834]: /usr/lib/frr/bgpd(bgp_update+0x9a5) [0x55eefd35c1d5]
-BGP[7834]: /usr/lib/frr/bgpd(bgp_nlri_parse_ip+0xb7) [0x55eefd35e867]
-BGP[7834]: /usr/lib/frr/bgpd(+0x1555e6) [0x55eefd3405e6]
-BGP[7834]: /usr/lib/frr/bgpd(bgp_process_packet+0x747) [0x55eefd345597]
-BGP[7834]: /usr/local/lib/libfrr.so.0(event_call+0x83) [0x7f3205cef4a3]
-BGP[7834]: /usr/local/lib/libfrr.so.0(frr_run+0xc0) [0x7f3205ca10a0]
-BGP[7834]: /usr/lib/frr/bgpd(main+0x409) [0x55eefd2dc979]
-```
-
-Sending:
-
-```
-import socket
-import time
-
-OPEN = (b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
-b"\xff\xff\x00\x62\x01\x04\xfd\xea\x00\x5a\x0a\x00\x00\x01\x45\x02"
-b"\x06\x01\x04\x00\x01\x00\x01\x02\x02\x02\x00\x02\x02\x46\x00\x02"
-b"\x06\x41\x04\x00\x00\xfd\xea\x02\x02\x06\x00\x02\x06\x45\x04\x00"
-b"\x01\x01\x03\x02\x0e\x49\x0c\x0a\x64\x6f\x6e\x61\x74\x61\x73\x2d"
-b"\x70\x63\x00\x02\x04\x40\x02\x00\x78\x02\x09\x47\x07\x00\x01\x01"
-b"\x80\x00\x00\x00")
-
-KEEPALIVE = (b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
-b"\xff\xff\xff\xff\xff\xff\x00\x13\x04")
-
-UPDATE = bytearray.fromhex("ffffffffffffffffffffffffffffffff003c0200000014ff1f001000040146464646460004464646464646664646f50d05800100010200ffff000000")
-
-s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-s.connect(('127.0.0.2', 179))
-s.send(OPEN)
-data = s.recv(1024)
-s.send(KEEPALIVE)
-data = s.recv(1024)
-s.send(UPDATE)
-data = s.recv(1024)
-time.sleep(1000)
-s.close()
-```
-
-Reported-by: Iggy Frankovic <iggyfran@amazon.com>
-Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
-Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/d8482bf011cb2b173e85b65b4bf3d5061250cdb9]
-CVE: CVE-2023-46753
-Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
----
- bgpd/bgp_attr.c | 10 ++++++----
- 1 file changed, 6 insertions(+), 4 deletions(-)
-
-diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
-index e7bb42a5d989..cf2dbe65b805 100644
---- a/bgpd/bgp_attr.c
-+++ b/bgpd/bgp_attr.c
-@@ -3385,13 +3385,15 @@ bgp_attr_unknown(struct bgp_attr_parser_args *args)
- }
- 
- /* Well-known attribute check. */
--static int bgp_attr_check(struct peer *peer, struct attr *attr)
-+static int bgp_attr_check(struct peer *peer, struct attr *attr,
-+			  bgp_size_t length)
- {
- 	uint8_t type = 0;
- 
- 	/* BGP Graceful-Restart End-of-RIB for IPv4 unicast is signaled as an
- 	 * empty UPDATE.  */
--	if (CHECK_FLAG(peer->cap, PEER_CAP_RESTART_RCV) && !attr->flag)
-+	if (CHECK_FLAG(peer->cap, PEER_CAP_RESTART_RCV) && !attr->flag &&
-+	    !length)
- 		return BGP_ATTR_PARSE_PROCEED;
- 
- 	/* "An UPDATE message that contains the MP_UNREACH_NLRI is not required
-@@ -3443,7 +3445,7 @@ enum bgp_attr_parse_ret bgp_attr_parse(struct peer *peer, struct attr *attr,
- 	enum bgp_attr_parse_ret ret;
- 	uint8_t flag = 0;
- 	uint8_t type = 0;
--	bgp_size_t length;
-+	bgp_size_t length = 0;
- 	uint8_t *startp, *endp;
- 	uint8_t *attr_endp;
- 	uint8_t seen[BGP_ATTR_BITMAP_SIZE];
-@@ -3831,7 +3833,7 @@ enum bgp_attr_parse_ret bgp_attr_parse(struct peer *peer, struct attr *attr,
- 	}
- 
- 	/* Check all mandatory well-known attributes are present */
--	ret = bgp_attr_check(peer, attr);
-+	ret = bgp_attr_check(peer, attr, length);
- 	if (ret < 0)
- 		goto done;
- 
--- 
-2.42.1
-
diff --git a/meta-networking/recipes-protocols/frr/frr/CVE-2023-47234.patch b/meta-networking/recipes-protocols/frr/frr/CVE-2023-47234.patch
deleted file mode 100644
index 754f9345a..000000000
--- a/meta-networking/recipes-protocols/frr/frr/CVE-2023-47234.patch
+++ /dev/null
@@ -1,95 +0,0 @@ 
-From c37119df45bbf4ef713bc10475af2ee06e12f3bf Mon Sep 17 00:00:00 2001
-From: Donatas Abraitis <donatas@opensourcerouting.org>
-Date: Sun, 29 Oct 2023 22:44:45 +0200
-Subject: [PATCH] bgpd: Ignore handling NLRIs if we received MP_UNREACH_NLRI
-
-If we receive MP_UNREACH_NLRI, we should stop handling remaining NLRIs if
-no mandatory path attributes received.
-
-In other words, if MP_UNREACH_NLRI received, the remaining NLRIs should be handled
-as a new data, but without mandatory attributes, it's a malformed packet.
-
-In normal case, this MUST not happen at all, but to avoid crashing bgpd, we MUST
-handle that.
-
-Reported-by: Iggy Frankovic <iggyfran@amazon.com>
-Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
-Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/c37119df45bbf4ef713bc10475af2ee06e12f3bf]
-CVE: CVE-2023-47234
-Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
----
- bgpd/bgp_attr.c   | 19 ++++++++++---------
- bgpd/bgp_attr.h   |  1 +
- bgpd/bgp_packet.c |  7 ++++++-
- 3 files changed, 17 insertions(+), 10 deletions(-)
-
-diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
-index 1473dc772502..75aa2ac7cce6 100644
---- a/bgpd/bgp_attr.c
-+++ b/bgpd/bgp_attr.c
-@@ -3399,15 +3399,6 @@ static int bgp_attr_check(struct peer *peer, struct attr *attr,
- 	    !length)
- 		return BGP_ATTR_PARSE_WITHDRAW;
- 
--	/* "An UPDATE message that contains the MP_UNREACH_NLRI is not required
--	   to carry any other path attributes.", though if MP_REACH_NLRI or NLRI
--	   are present, it should.  Check for any other attribute being present
--	   instead.
--	 */
--	if ((!CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_MP_REACH_NLRI)) &&
--	     CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_MP_UNREACH_NLRI))))
--		return BGP_ATTR_PARSE_PROCEED;
--
- 	if (!CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_ORIGIN)))
- 		type = BGP_ATTR_ORIGIN;
- 
-@@ -3426,6 +3417,16 @@ static int bgp_attr_check(struct peer *peer, struct attr *attr,
- 	    && !CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_LOCAL_PREF)))
- 		type = BGP_ATTR_LOCAL_PREF;
- 
-+	/* An UPDATE message that contains the MP_UNREACH_NLRI is not required
-+	 * to carry any other path attributes. Though if MP_REACH_NLRI or NLRI
-+	 * are present, it should. Check for any other attribute being present
-+	 * instead.
-+	 */
-+	if (!CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_MP_REACH_NLRI)) &&
-+	    CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_MP_UNREACH_NLRI)))
-+		return type ? BGP_ATTR_PARSE_MISSING_MANDATORY
-+			    : BGP_ATTR_PARSE_PROCEED;
-+
- 	/* If any of the well-known mandatory attributes are not present
- 	 * in an UPDATE message, then "treat-as-withdraw" MUST be used.
- 	 */
-diff --git a/bgpd/bgp_attr.h b/bgpd/bgp_attr.h
-index fc347e7a1b4b..d30155e6dba0 100644
---- a/bgpd/bgp_attr.h
-+++ b/bgpd/bgp_attr.h
-@@ -364,6 +364,7 @@ enum bgp_attr_parse_ret {
- 	/* only used internally, send notify + convert to BGP_ATTR_PARSE_ERROR
- 	 */
- 	BGP_ATTR_PARSE_ERROR_NOTIFYPLS = -3,
-+	BGP_ATTR_PARSE_MISSING_MANDATORY = -4,
- };
- 
- struct bpacket_attr_vec_arr;
-diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
-index a7514a26aa64..5dc35157ebf6 100644
---- a/bgpd/bgp_packet.c
-+++ b/bgpd/bgp_packet.c
-@@ -2359,7 +2359,12 @@ static int bgp_update_receive(struct peer_connection *connection,
- 	/* Network Layer Reachability Information. */
- 	update_len = end - stream_pnt(s);
- 
--	if (update_len && attribute_len) {
-+	/* If we received MP_UNREACH_NLRI attribute, but also NLRIs, then
-+	 * NLRIs should be handled as a new data. Though, if we received
-+	 * NLRIs without mandatory attributes, they should be ignored.
-+	 */
-+	if (update_len && attribute_len &&
-+	    attr_parse_ret != BGP_ATTR_PARSE_MISSING_MANDATORY) {
- 		/* Set NLRI portion to structure. */
- 		nlris[NLRI_UPDATE].afi = AFI_IP;
- 		nlris[NLRI_UPDATE].safi = SAFI_UNICAST;
--- 
-2.42.1
-
diff --git a/meta-networking/recipes-protocols/frr/frr/CVE-2023-47235.patch b/meta-networking/recipes-protocols/frr/frr/CVE-2023-47235.patch
deleted file mode 100644
index b06ba94a3..000000000
--- a/meta-networking/recipes-protocols/frr/frr/CVE-2023-47235.patch
+++ /dev/null
@@ -1,112 +0,0 @@ 
-From 6814f2e0138a6ea5e1f83bdd9085d9a77999900b Mon Sep 17 00:00:00 2001
-From: Donatas Abraitis <donatas@opensourcerouting.org>
-Date: Fri, 27 Oct 2023 11:56:45 +0300
-Subject: [PATCH] bgpd: Treat EOR as withdrawn to avoid unwanted handling of
- malformed attrs
-
-Treat-as-withdraw, otherwise if we just ignore it, we will pass it to be
-processed as a normal UPDATE without mandatory attributes, that could lead
-to harmful behavior. In this case, a crash for route-maps with the configuration
-such as:
-
-```
-router bgp 65001
- no bgp ebgp-requires-policy
- neighbor 127.0.0.1 remote-as external
- neighbor 127.0.0.1 passive
- neighbor 127.0.0.1 ebgp-multihop
- neighbor 127.0.0.1 disable-connected-check
- neighbor 127.0.0.1 update-source 127.0.0.2
- neighbor 127.0.0.1 timers 3 90
- neighbor 127.0.0.1 timers connect 1
- !
- address-family ipv4 unicast
-  neighbor 127.0.0.1 addpath-tx-all-paths
-  neighbor 127.0.0.1 default-originate
-  neighbor 127.0.0.1 route-map RM_IN in
- exit-address-family
-exit
-!
-route-map RM_IN permit 10
- set as-path prepend 200
-exit
-```
-
-Send a malformed optional transitive attribute:
-
-```
-import socket
-import time
-
-OPEN = (b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
-b"\xff\xff\x00\x62\x01\x04\xfd\xea\x00\x5a\x0a\x00\x00\x01\x45\x02"
-b"\x06\x01\x04\x00\x01\x00\x01\x02\x02\x02\x00\x02\x02\x46\x00\x02"
-b"\x06\x41\x04\x00\x00\xfd\xea\x02\x02\x06\x00\x02\x06\x45\x04\x00"
-b"\x01\x01\x03\x02\x0e\x49\x0c\x0a\x64\x6f\x6e\x61\x74\x61\x73\x2d"
-b"\x70\x63\x00\x02\x04\x40\x02\x00\x78\x02\x09\x47\x07\x00\x01\x01"
-b"\x80\x00\x00\x00")
-
-KEEPALIVE = (b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
-b"\xff\xff\xff\xff\xff\xff\x00\x13\x04")
-
-UPDATE = bytearray.fromhex("ffffffffffffffffffffffffffffffff002b0200000003c0ff00010100eb00ac100b0b001ad908ac100b0b")
-
-s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-s.connect(('127.0.0.2', 179))
-s.send(OPEN)
-data = s.recv(1024)
-s.send(KEEPALIVE)
-data = s.recv(1024)
-s.send(UPDATE)
-data = s.recv(1024)
-time.sleep(100)
-s.close()
-```
-
-Reported-by: Iggy Frankovic <iggyfran@amazon.com>
-Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
-Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/6814f2e0138a6ea5e1f83bdd9085d9a77999900b]
-CVE: CVE-2023-47235
-Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
----
- bgpd/bgp_attr.c | 15 ++++++++++++---
- 1 file changed, 12 insertions(+), 3 deletions(-)
-
-diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
-index cf2dbe65b805..1473dc772502 100644
---- a/bgpd/bgp_attr.c
-+++ b/bgpd/bgp_attr.c
-@@ -3391,10 +3391,13 @@ static int bgp_attr_check(struct peer *peer, struct attr *attr,
- 	uint8_t type = 0;
- 
- 	/* BGP Graceful-Restart End-of-RIB for IPv4 unicast is signaled as an
--	 * empty UPDATE.  */
-+	 * empty UPDATE. Treat-as-withdraw, otherwise if we just ignore it,
-+	 * we will pass it to be processed as a normal UPDATE without mandatory
-+	 * attributes, that could lead to harmful behavior.
-+	 */
- 	if (CHECK_FLAG(peer->cap, PEER_CAP_RESTART_RCV) && !attr->flag &&
- 	    !length)
--		return BGP_ATTR_PARSE_PROCEED;
-+		return BGP_ATTR_PARSE_WITHDRAW;
- 
- 	/* "An UPDATE message that contains the MP_UNREACH_NLRI is not required
- 	   to carry any other path attributes.", though if MP_REACH_NLRI or NLRI
-@@ -3889,7 +3892,13 @@ done:
- 	aspath_unintern(&as4_path);
- 
- 	transit = bgp_attr_get_transit(attr);
--	if (ret != BGP_ATTR_PARSE_ERROR) {
-+	/* If we received an UPDATE with mandatory attributes, then
-+	 * the unrecognized transitive optional attribute of that
-+	 * path MUST be passed. Otherwise, it's an error, and from
-+	 * security perspective it might be very harmful if we continue
-+	 * here with the unrecognized attributes.
-+	 */
-+	if (ret == BGP_ATTR_PARSE_PROCEED) {
- 		/* Finally intern unknown attribute. */
- 		if (transit)
- 			bgp_attr_set_transit(attr, transit_intern(transit));
--- 
-2.42.1
-
diff --git a/meta-networking/recipes-protocols/frr/frr_9.0.1.bb b/meta-networking/recipes-protocols/frr/frr_9.1.bb
similarity index 94%
rename from meta-networking/recipes-protocols/frr/frr_9.0.1.bb
rename to meta-networking/recipes-protocols/frr/frr_9.1.bb
index c447df051..9db6710d9 100644
--- a/meta-networking/recipes-protocols/frr/frr_9.0.1.bb
+++ b/meta-networking/recipes-protocols/frr/frr_9.1.bb
@@ -11,16 +11,11 @@  LIC_FILES_CHKSUM = "file://doc/licenses/GPL-2.0;md5=b234ee4d69f5fce4486a80fdaf4a
 
 PR = "r1"
 
-SRC_URI = "git://github.com/FRRouting/frr.git;protocol=https;branch=stable/9.0 \
+SRC_URI = "git://github.com/FRRouting/frr.git;protocol=https;branch=stable/9.1 \
            file://frr.pam \
-           file://0001-tools-make-quiet-actually-suppress-output.patch \
-           file://CVE-2023-46752.patch \
-           file://CVE-2023-46753.patch \
-           file://CVE-2023-47235.patch \
-           file://CVE-2023-47234.patch \
            "
 
-SRCREV = "31ed3dd753d62b5d8916998bc32814007e91364b"
+SRCREV = "312faf8008bb4f3b9e84b8e2758cd2cbdf5742b5"
 
 UPSTREAM_CHECK_GITTAGREGEX = "frr-(?P<pver>\d+(\.\d+)+)$"