subtree updates

meta-openembedded: 0782ea454a..ce0b93fc12:
  Alex Kiernan (5):
        faad2: Upgrade 2.8.8 -> 2.10.0
        onig: Upgrade 6.9.4 -> 6.9.8
        jansson: Honour multilib paths
        jansson: Backport linker flag fixes
        jansson: Default to shared builds

  Beniamin Sandu (1):
        libnet: update to v1.2 release

  Daniel Gomez (4):
        gst-instruments: Update 0.2.3 -> 0.3.1+cb8977a
        libftdi: Add ftdi-eeprom support
        xf86-video-ati: Update 19.1.0 -> 19.1.0+7a6a34af
        v4l-utils: Update 1.22.1 -> 1.23.0+fd544473

  Gianluigi Spagnuolo (1):
        bpftool: add aarch64 to COMPATIBLE_HOST

  Hitomi Hasegawa (1):
        libsdl: add CVE-2019-14906 to allowlist

  Khem Raj (2):
        python3-gevent: Avoid building internal version of libev
        xterm: Add _GNU_SOURCE via CFLAGS

  Lukas Rusak (2):
        libwebsockets: add optional support for sd-event loop
        libwebsockets: add error check if PACKAGECONFIG contains systemd but DISTRO_FEATURES doesn't

  Ming Liu (1):
        plymouth: uprev to 22.02.122

  William A. Kennington III (2):
        gerbera: upgrade 1.9.2 -> 1.11.0
        fmt: upgrade 8.1.1 -> 9.1.0

  Yi Zhao (4):
        freeradius: fix daemon startup warnings
        frr: upgrade 8.2.2 -> 8.3.1
        libnftnl: upgrade 1.2.2 -> 1.2.3
        nftables: upgrade 1.0.4 -> 1.0.5

  onkelpit (1):
        tio: added tio version 2.0 and 1.47

  wangmy (1):
        xterm: upgrade 372 -> 373

meta-arm: 52f07a4b0b..0164b4ca7a:
  Abdellatif El Khlifi (12):
        arm-bsp/u-boot: corstone1000: update initramfs bundle size
        arm-bsp/u-boot: corstone1000: upgrade FF-A support
        arm-bsp/optee-os: corstone1000: upgrade to v3.18
        arm-bsp/optee-spdevkit: corstone1000: drop the support
        arm-bsp/corstone1000-initramfs-image: remove obsolete packages
        arm-bsp/trusted-services: corstone1000: add secure partitions support
        arm-bsp/machine: corstone1000: disable pulling the kernel into the initramfs
        arm-bsp/trusted-services: corstone1000: add MHU-driver
        arm-bsp/corstone1000-initramfs-image: add TS PSA API tests packages
        arm-bsp/linux: corstone1000: use arm-ffa machine feature
        arm/secure-partitions: drop use of the recipe
        arm/ffa-debugfs: drop use of the kernel module

  Adam Johnston (3):
        arm-bsp/edk2-firmware: Update edk2/edk2-platforms versions for N1SDP
        arm-bsp/edk2-firmware: Add edk2-platforms patches for N1SDP
        arm-bsp/trusted-firmware-a: Update TF-A version for N1SDP

  Andrei Gherzan (1):
        edk2-firmware: Fix configure sed typo

  Anton Antonov (1):
        Temporary use qemu 7.0.0 for TS CI pipelines

  Davidson K (6):
        arm-bsp/tc: upgrade version of trusted-firmware-a
        arm-bsp/tc: upgrade version of hafnium
        arm-bsp/tc: upgrade version of optee
        arm-bsp/u-boot: add gnutls-native as dependency
        arm-bsp/trusted-firmware-a: add firmware update support for TC
        arm-bsp/hafnium: enable Virtual Host Extension for TC

  Denys Dmytriyenko (1):
        arm-toolchain/gcc,external-arm-toolchain: resolve conflict with gcc headers

  Emekcan (8):
        arm-bsp/u-boot: Add external system driver to u-boot device tree
        arm-bsp/kernel: Add external device driver
        arm-bsp/u-boot: Add external system MHUs to u-boot device tree
        arm-bsp/kernel: Add rpmsg_arm_mailbox to corstone1000
        arm-bsp/test: Adding a test app for external system
        arm-bsp/images: Adding external system test to initramfs image
        arm-bsp/test: Changing the test app repository
        arm-bsp/external-system: Changing the RTX repo

  Jiacheng Tang (1):
        arm/fvp-base-r-aem: upgrade to version 11.19.14

  Joe Slater (1):
        arm/packagegroup-ts-tests: fix parse error

  Jon Mason (17):
        arm-bsp/optee-os: add 3.10 recipe for corstone1000
        arm-bsp/optee: rename corstone1000 files
        arm/optee-spdevkit: add version to file name
        arm/optee-os: add ARMv7 changes to clang patch and update patches
        arm/qemuarm-secureboot: remove optee-os version pin
        arm/optee: remove old versions
        arm/optee-client: move the 3.14 recipe to meta-arm-bsp
        arm/hafnium: update to 2.7
        arm-bsp/n1sdp: update linux-yocto patches
        arm/edk2-firmware: Work around clang issue
        arm-bsp/tc: remove hafnium clang patch
        layers: convert to langdale compatibility
        CI: Remove uniquely zephyr machines
        arm-bsp/fvp: move the fvp include file to the include directory
        ci: move features only needed by testimage from base
        CI: apply a patch so that meta-zephyr is compatible with langdale
        Revert "CI: apply a patch so that meta-zephyr is compatible with langdale"

  Khem Raj (6):
        optee-os: Extend clang pragma fixes to core_mmu_v7.c for 3.18
        trusted-services: Pin to use gcc
        ffa-debugfs-mod: Exclude from world builds
        linux-yocto: Add bbappend for 5.19
        hafnium: Add a fix for clang-15 errors
        hafnium: Exclude from world builds

  Mohamed Omar Asaker (1):
        arm-bsp/n1sdp-board-firmware: upgrade to N1SDP-2022.06.22

  Peter Hoyes (4):
        arm/lib: Specify the FVP environment variables explicitly
        arm-bsp/trusted-firmware-m: Make branch names configurable
        arm/classes: Migrate TF-M image signing to bbclass
        arm-bsp/corstone1000: Refactor image signing to use new bbclass

  Ross Burton (3):
        gem5/linux-yocto: upgrade to 5.4.205 and fix buildpaths in binaries
        Revert "Temporary use qemu 7.0.0 for TS CI pipelines"
        runfvp: pass-through environment variables need for GUI applications

  Rui Miguel Silva (1):
        arm-bsp: trusted-services: fix openamp build

  Vishnu Banavath (2):
        arm-bsp/ffa-debugfs: update git SHA for v2.1.0
        arm-bsp/external-system:corstone1000: build and install external-system

  Xueliang Zhong (1):
        arm-bsp/n1sdp: upgrade scp-firmware version

Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I7a07eab9e4aa0bdbdb50602050c3c4caf062acbf
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd-volatiles.conf b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd-volatiles.conf
index fa62962..f3619dd 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd-volatiles.conf
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd-volatiles.conf
@@ -1,2 +1,2 @@
 d /var/log/radius  0755 radiusd radiusd -
-d /var/run/radiusd 0755 radiusd radiusd -
+d /run/radiusd     0755 radiusd radiusd -
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd.service b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd.service
index 2d76648..37a2eb3 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd.service
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd.service
@@ -5,7 +5,7 @@
 [Service]
 Type=forking
 PIDFile=/run/radiusd/radiusd.pid
-ExecStartPre=-@BASE_BINDIR@/chown -R radiusd.radiusd /run/radiusd
+ExecStartPre=-@BASE_BINDIR@/chown -R radiusd:radiusd /run/radiusd
 ExecStartPre=@SBINDIR@/radiusd -C
 ExecStart=@SBINDIR@/radiusd -d @SYSCONFDIR@/raddb
 ExecReload=@SBINDIR@/radiusd -C
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl/0001-avoid-naming-local-function-as-one-of-printf-family.patch b/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl/0001-avoid-naming-local-function-as-one-of-printf-family.patch
deleted file mode 100644
index 68eb04a..0000000
--- a/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl/0001-avoid-naming-local-function-as-one-of-printf-family.patch
+++ /dev/null
@@ -1,650 +0,0 @@
-From e03b003610a176d608da9a02e433e7ded7e4b75f Mon Sep 17 00:00:00 2001
-From: Todd Cunningham <tcunningham07@gmail.com>
-Date: Wed, 11 Dec 2019 10:18:56 +1000
-Subject: [PATCH] avoid naming local function as one of printf family
-
-Fixes build issues with clang
-error: no member named '__builtin___snprintf_chk' in 'struct expr_ops'
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
-
-Signed-off-by: Yuan Chao <yuanc.fnst@cn.fujitsu.com>
-Signed-off-by: Todd Cunningham <tcunningham07@gmail.com>
-
-Use wiggle to get the patch to apply for version 1.2.0.
-
-Add the same change in src/expr/last.c to make the patch apply for
-1.2.1. Also correct the patch to show the original author and metadata.
-
-Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com>
----
- include/expr_ops.h      | 2 +-
- include/obj.h           | 2 +-
- src/expr.c              | 4 ++--
- src/expr/bitwise.c      | 2 +-
- src/expr/byteorder.c    | 2 +-
- src/expr/cmp.c          | 2 +-
- src/expr/connlimit.c    | 2 +-
- src/expr/counter.c      | 2 +-
- src/expr/ct.c           | 2 +-
- src/expr/dup.c          | 2 +-
- src/expr/dynset.c       | 2 +-
- src/expr/exthdr.c       | 2 +-
- src/expr/fib.c          | 2 +-
- src/expr/flow_offload.c | 2 +-
- src/expr/fwd.c          | 2 +-
- src/expr/hash.c         | 2 +-
- src/expr/immediate.c    | 2 +-
- src/expr/last.c         | 2 +-
- src/expr/limit.c        | 2 +-
- src/expr/log.c          | 2 +-
- src/expr/lookup.c       | 2 +-
- src/expr/masq.c         | 2 +-
- src/expr/match.c        | 2 +-
- src/expr/meta.c         | 2 +-
- src/expr/nat.c          | 2 +-
- src/expr/numgen.c       | 2 +-
- src/expr/objref.c       | 2 +-
- src/expr/osf.c          | 2 +-
- src/expr/payload.c      | 2 +-
- src/expr/queue.c        | 2 +-
- src/expr/quota.c        | 2 +-
- src/expr/range.c        | 2 +-
- src/expr/redir.c        | 2 +-
- src/expr/reject.c       | 2 +-
- src/expr/rt.c           | 2 +-
- src/expr/socket.c       | 2 +-
- src/expr/synproxy.c     | 2 +-
- src/expr/target.c       | 2 +-
- src/expr/tproxy.c       | 2 +-
- src/expr/tunnel.c       | 2 +-
- src/expr/xfrm.c         | 2 +-
- src/obj/counter.c       | 2 +-
- src/obj/ct_expect.c     | 2 +-
- src/obj/ct_helper.c     | 2 +-
- src/obj/ct_timeout.c    | 2 +-
- src/obj/limit.c         | 2 +-
- src/obj/quota.c         | 2 +-
- src/obj/secmark.c       | 2 +-
- src/obj/synproxy.c      | 2 +-
- src/obj/tunnel.c        | 2 +-
- src/object.c            | 2 +-
- 51 files changed, 52 insertions(+), 52 deletions(-)
-
-diff --git a/include/expr_ops.h b/include/expr_ops.h
-index 7a6aa23..d3a2855 100644
---- a/include/expr_ops.h
-+++ b/include/expr_ops.h
-@@ -18,7 +18,7 @@ struct expr_ops {
- 	const void *(*get)(const struct nftnl_expr *e, uint16_t type, uint32_t *data_len);
- 	int 	(*parse)(struct nftnl_expr *e, struct nlattr *attr);
- 	void	(*build)(struct nlmsghdr *nlh, const struct nftnl_expr *e);
--	int	(*snprintf)(char *buf, size_t len, uint32_t flags, const struct nftnl_expr *e);
-+	int	(*snprintf_)(char *buf, size_t len, uint32_t flags, const struct nftnl_expr *e);
- };
- 
- struct expr_ops *nftnl_expr_ops_lookup(const char *name);
-diff --git a/include/obj.h b/include/obj.h
-index 60dc853..1c1c3c1 100644
---- a/include/obj.h
-+++ b/include/obj.h
-@@ -109,7 +109,7 @@ struct obj_ops {
- 	const void *(*get)(const struct nftnl_obj *e, uint16_t type, uint32_t *data_len);
- 	int	(*parse)(struct nftnl_obj *e, struct nlattr *attr);
- 	void	(*build)(struct nlmsghdr *nlh, const struct nftnl_obj *e);
--	int	(*snprintf)(char *buf, size_t len, uint32_t flags, const struct nftnl_obj *e);
-+	int	(*snprintf_)(char *buf, size_t len, uint32_t flags, const struct nftnl_obj *e);
- };
- 
- extern struct obj_ops obj_ops_counter;
-diff --git a/src/expr.c b/src/expr.c
-index 277bbde..2231b21 100644
---- a/src/expr.c
-+++ b/src/expr.c
-@@ -279,10 +279,10 @@ int nftnl_expr_snprintf(char *buf, size_t remain, const struct nftnl_expr *expr,
- 	if (remain)
- 		buf[0] = '\0';
- 
--	if (!expr->ops->snprintf || type != NFTNL_OUTPUT_DEFAULT)
-+	if (!expr->ops->snprintf_ || type != NFTNL_OUTPUT_DEFAULT)
- 		return 0;
- 
--	ret = expr->ops->snprintf(buf + offset, remain, flags, expr);
-+	ret = expr->ops->snprintf_(buf + offset, remain, flags, expr);
- 	SNPRINTF_BUFFER_SIZE(ret, remain, offset);
- 
- 	return offset;
-diff --git a/src/expr/bitwise.c b/src/expr/bitwise.c
-index d0c7827..eded505 100644
---- a/src/expr/bitwise.c
-+++ b/src/expr/bitwise.c
-@@ -282,5 +282,5 @@ struct expr_ops expr_ops_bitwise = {
- 	.get		= nftnl_expr_bitwise_get,
- 	.parse		= nftnl_expr_bitwise_parse,
- 	.build		= nftnl_expr_bitwise_build,
--	.snprintf	= nftnl_expr_bitwise_snprintf,
-+	.snprintf_	= nftnl_expr_bitwise_snprintf,
- };
-diff --git a/src/expr/byteorder.c b/src/expr/byteorder.c
-index d299745..0068ab2 100644
---- a/src/expr/byteorder.c
-+++ b/src/expr/byteorder.c
-@@ -220,5 +220,5 @@ struct expr_ops expr_ops_byteorder = {
- 	.get		= nftnl_expr_byteorder_get,
- 	.parse		= nftnl_expr_byteorder_parse,
- 	.build		= nftnl_expr_byteorder_build,
--	.snprintf	= nftnl_expr_byteorder_snprintf,
-+	.snprintf_	= nftnl_expr_byteorder_snprintf,
- };
-diff --git a/src/expr/cmp.c b/src/expr/cmp.c
-index 6030693..7e548e6 100644
---- a/src/expr/cmp.c
-+++ b/src/expr/cmp.c
-@@ -202,5 +202,5 @@ struct expr_ops expr_ops_cmp = {
- 	.get		= nftnl_expr_cmp_get,
- 	.parse		= nftnl_expr_cmp_parse,
- 	.build		= nftnl_expr_cmp_build,
--	.snprintf	= nftnl_expr_cmp_snprintf,
-+	.snprintf_	= nftnl_expr_cmp_snprintf,
- };
-diff --git a/src/expr/connlimit.c b/src/expr/connlimit.c
-index 3b37587..39b7092 100644
---- a/src/expr/connlimit.c
-+++ b/src/expr/connlimit.c
-@@ -135,5 +135,5 @@ struct expr_ops expr_ops_connlimit = {
- 	.get		= nftnl_expr_connlimit_get,
- 	.parse		= nftnl_expr_connlimit_parse,
- 	.build		= nftnl_expr_connlimit_build,
--	.snprintf	= nftnl_expr_connlimit_snprintf,
-+	.snprintf_  = nftnl_expr_connlimit_snprintf,
- };
-diff --git a/src/expr/counter.c b/src/expr/counter.c
-index 1676d70..42c96d9 100644
---- a/src/expr/counter.c
-+++ b/src/expr/counter.c
-@@ -133,5 +133,5 @@ struct expr_ops expr_ops_counter = {
- 	.get		= nftnl_expr_counter_get,
- 	.parse		= nftnl_expr_counter_parse,
- 	.build		= nftnl_expr_counter_build,
--	.snprintf	= nftnl_expr_counter_snprintf,
-+	.snprintf_	= nftnl_expr_counter_snprintf,
- };
-diff --git a/src/expr/ct.c b/src/expr/ct.c
-index d5dfc81..8c15db1 100644
---- a/src/expr/ct.c
-+++ b/src/expr/ct.c
-@@ -258,5 +258,5 @@ struct expr_ops expr_ops_ct = {
- 	.get		= nftnl_expr_ct_get,
- 	.parse		= nftnl_expr_ct_parse,
- 	.build		= nftnl_expr_ct_build,
--	.snprintf	= nftnl_expr_ct_snprintf,
-+	.snprintf_	= nftnl_expr_ct_snprintf,
- };
-diff --git a/src/expr/dup.c b/src/expr/dup.c
-index f041b55..6238a43 100644
---- a/src/expr/dup.c
-+++ b/src/expr/dup.c
-@@ -138,5 +138,5 @@ struct expr_ops expr_ops_dup = {
- 	.get		= nftnl_expr_dup_get,
- 	.parse		= nftnl_expr_dup_parse,
- 	.build		= nftnl_expr_dup_build,
--	.snprintf	= nftnl_expr_dup_snprintf,
-+	.snprintf_	= nftnl_expr_dup_snprintf,
- };
-diff --git a/src/expr/dynset.c b/src/expr/dynset.c
-index 85d64bb..9afbb94 100644
---- a/src/expr/dynset.c
-+++ b/src/expr/dynset.c
-@@ -373,5 +373,5 @@ struct expr_ops expr_ops_dynset = {
- 	.get		= nftnl_expr_dynset_get,
- 	.parse		= nftnl_expr_dynset_parse,
- 	.build		= nftnl_expr_dynset_build,
--	.snprintf	= nftnl_expr_dynset_snprintf,
-+	.snprintf_	= nftnl_expr_dynset_snprintf,
- };
-diff --git a/src/expr/exthdr.c b/src/expr/exthdr.c
-index 1b813b1..25f1491 100644
---- a/src/expr/exthdr.c
-+++ b/src/expr/exthdr.c
-@@ -262,5 +262,5 @@ struct expr_ops expr_ops_exthdr = {
- 	.get		= nftnl_expr_exthdr_get,
- 	.parse		= nftnl_expr_exthdr_parse,
- 	.build		= nftnl_expr_exthdr_build,
--	.snprintf	= nftnl_expr_exthdr_snprintf,
-+	.snprintf_	= nftnl_expr_exthdr_snprintf,
- };
-diff --git a/src/expr/fib.c b/src/expr/fib.c
-index aaff52a..3916e18 100644
---- a/src/expr/fib.c
-+++ b/src/expr/fib.c
-@@ -198,5 +198,5 @@ struct expr_ops expr_ops_fib = {
- 	.get		= nftnl_expr_fib_get,
- 	.parse		= nftnl_expr_fib_parse,
- 	.build		= nftnl_expr_fib_build,
--	.snprintf	= nftnl_expr_fib_snprintf,
-+	.snprintf_	= nftnl_expr_fib_snprintf,
- };
-diff --git a/src/expr/flow_offload.c b/src/expr/flow_offload.c
-index a826202..c1ca678 100644
---- a/src/expr/flow_offload.c
-+++ b/src/expr/flow_offload.c
-@@ -120,5 +120,5 @@ struct expr_ops expr_ops_flow = {
- 	.get		= nftnl_expr_flow_get,
- 	.parse		= nftnl_expr_flow_parse,
- 	.build		= nftnl_expr_flow_build,
--	.snprintf	= nftnl_expr_flow_snprintf,
-+	.snprintf_	= nftnl_expr_flow_snprintf,
- };
-diff --git a/src/expr/fwd.c b/src/expr/fwd.c
-index 82e5a41..4e80687 100644
---- a/src/expr/fwd.c
-+++ b/src/expr/fwd.c
-@@ -158,5 +158,5 @@ struct expr_ops expr_ops_fwd = {
- 	.get		= nftnl_expr_fwd_get,
- 	.parse		= nftnl_expr_fwd_parse,
- 	.build		= nftnl_expr_fwd_build,
--	.snprintf	= nftnl_expr_fwd_snprintf,
-+	.snprintf_	= nftnl_expr_fwd_snprintf,
- };
-diff --git a/src/expr/hash.c b/src/expr/hash.c
-index 10b4a72..84ace31 100644
---- a/src/expr/hash.c
-+++ b/src/expr/hash.c
-@@ -226,5 +226,5 @@ struct expr_ops expr_ops_hash = {
- 	.get		= nftnl_expr_hash_get,
- 	.parse		= nftnl_expr_hash_parse,
- 	.build		= nftnl_expr_hash_build,
--	.snprintf	= nftnl_expr_hash_snprintf,
-+	.snprintf_	= nftnl_expr_hash_snprintf,
- };
-diff --git a/src/expr/immediate.c b/src/expr/immediate.c
-index 94b043c..a8a3c1f 100644
---- a/src/expr/immediate.c
-+++ b/src/expr/immediate.c
-@@ -229,5 +229,5 @@ struct expr_ops expr_ops_immediate = {
- 	.get		= nftnl_expr_immediate_get,
- 	.parse		= nftnl_expr_immediate_parse,
- 	.build		= nftnl_expr_immediate_build,
--	.snprintf	= nftnl_expr_immediate_snprintf,
-+	.snprintf_	= nftnl_expr_immediate_snprintf,
- };
-diff --git a/src/expr/last.c b/src/expr/last.c
-index e2a60c4..2f75464 100644
---- a/src/expr/last.c
-+++ b/src/expr/last.c
-@@ -134,5 +134,5 @@ struct expr_ops expr_ops_last = {
- 	.get		= nftnl_expr_last_get,
- 	.parse		= nftnl_expr_last_parse,
- 	.build		= nftnl_expr_last_build,
--	.snprintf	= nftnl_expr_last_snprintf,
-+	.snprintf_	= nftnl_expr_last_snprintf,
- };
-diff --git a/src/expr/limit.c b/src/expr/limit.c
-index 3dfd54a..f652df0 100644
---- a/src/expr/limit.c
-+++ b/src/expr/limit.c
-@@ -202,5 +202,5 @@ struct expr_ops expr_ops_limit = {
- 	.get		= nftnl_expr_limit_get,
- 	.parse		= nftnl_expr_limit_parse,
- 	.build		= nftnl_expr_limit_build,
--	.snprintf	= nftnl_expr_limit_snprintf,
-+	.snprintf_	= nftnl_expr_limit_snprintf,
- };
-diff --git a/src/expr/log.c b/src/expr/log.c
-index 86db548..d96b7ce 100644
---- a/src/expr/log.c
-+++ b/src/expr/log.c
-@@ -253,5 +253,5 @@ struct expr_ops expr_ops_log = {
- 	.get		= nftnl_expr_log_get,
- 	.parse		= nftnl_expr_log_parse,
- 	.build		= nftnl_expr_log_build,
--	.snprintf	= nftnl_expr_log_snprintf,
-+	.snprintf_	= nftnl_expr_log_snprintf,
- };
-diff --git a/src/expr/lookup.c b/src/expr/lookup.c
-index 83adce9..1fbace4 100644
---- a/src/expr/lookup.c
-+++ b/src/expr/lookup.c
-@@ -206,5 +206,5 @@ struct expr_ops expr_ops_lookup = {
- 	.get		= nftnl_expr_lookup_get,
- 	.parse		= nftnl_expr_lookup_parse,
- 	.build		= nftnl_expr_lookup_build,
--	.snprintf	= nftnl_expr_lookup_snprintf,
-+	.snprintf_	= nftnl_expr_lookup_snprintf,
- };
-diff --git a/src/expr/masq.c b/src/expr/masq.c
-index 684708c..1ce099c 100644
---- a/src/expr/masq.c
-+++ b/src/expr/masq.c
-@@ -163,5 +163,5 @@ struct expr_ops expr_ops_masq = {
- 	.get		= nftnl_expr_masq_get,
- 	.parse		= nftnl_expr_masq_parse,
- 	.build		= nftnl_expr_masq_build,
--	.snprintf	= nftnl_expr_masq_snprintf,
-+	.snprintf_	= nftnl_expr_masq_snprintf,
- };
-diff --git a/src/expr/match.c b/src/expr/match.c
-index 533fdf5..8561986 100644
---- a/src/expr/match.c
-+++ b/src/expr/match.c
-@@ -189,5 +189,5 @@ struct expr_ops expr_ops_match = {
- 	.get		= nftnl_expr_match_get,
- 	.parse		= nftnl_expr_match_parse,
- 	.build		= nftnl_expr_match_build,
--	.snprintf	= nftnl_expr_match_snprintf,
-+	.snprintf_	= nftnl_expr_match_snprintf,
- };
-diff --git a/src/expr/meta.c b/src/expr/meta.c
-index 34fbb9b..1ef79a4 100644
---- a/src/expr/meta.c
-+++ b/src/expr/meta.c
-@@ -216,5 +216,5 @@ struct expr_ops expr_ops_meta = {
- 	.get		= nftnl_expr_meta_get,
- 	.parse		= nftnl_expr_meta_parse,
- 	.build		= nftnl_expr_meta_build,
--	.snprintf	= nftnl_expr_meta_snprintf,
-+	.snprintf_	= nftnl_expr_meta_snprintf,
- };
-diff --git a/src/expr/nat.c b/src/expr/nat.c
-index 0a9cdd7..bc4a3fa 100644
---- a/src/expr/nat.c
-+++ b/src/expr/nat.c
-@@ -274,5 +274,5 @@ struct expr_ops expr_ops_nat = {
- 	.get		= nftnl_expr_nat_get,
- 	.parse		= nftnl_expr_nat_parse,
- 	.build		= nftnl_expr_nat_build,
--	.snprintf	= nftnl_expr_nat_snprintf,
-+	.snprintf_	= nftnl_expr_nat_snprintf,
- };
-diff --git a/src/expr/numgen.c b/src/expr/numgen.c
-index 159dfec..99bb442 100644
---- a/src/expr/numgen.c
-+++ b/src/expr/numgen.c
-@@ -180,5 +180,5 @@ struct expr_ops expr_ops_ng = {
- 	.get		= nftnl_expr_ng_get,
- 	.parse		= nftnl_expr_ng_parse,
- 	.build		= nftnl_expr_ng_build,
--	.snprintf	= nftnl_expr_ng_snprintf,
-+	.snprintf_	= nftnl_expr_ng_snprintf,
- };
-diff --git a/src/expr/objref.c b/src/expr/objref.c
-index a4b6470..1b2d387 100644
---- a/src/expr/objref.c
-+++ b/src/expr/objref.c
-@@ -205,5 +205,5 @@ struct expr_ops expr_ops_objref = {
- 	.get		= nftnl_expr_objref_get,
- 	.parse		= nftnl_expr_objref_parse,
- 	.build		= nftnl_expr_objref_build,
--	.snprintf	= nftnl_expr_objref_snprintf,
-+	.snprintf_	= nftnl_expr_objref_snprintf,
- };
-diff --git a/src/expr/osf.c b/src/expr/osf.c
-index 215a681..75a6b3c 100644
---- a/src/expr/osf.c
-+++ b/src/expr/osf.c
-@@ -147,5 +147,5 @@ struct expr_ops expr_ops_osf = {
- 	.get		= nftnl_expr_osf_get,
- 	.parse		= nftnl_expr_osf_parse,
- 	.build		= nftnl_expr_osf_build,
--	.snprintf	= nftnl_expr_osf_snprintf,
-+	.snprintf_	= nftnl_expr_osf_snprintf,
- };
-diff --git a/src/expr/payload.c b/src/expr/payload.c
-index 82747ec..e9130ec 100644
---- a/src/expr/payload.c
-+++ b/src/expr/payload.c
-@@ -259,5 +259,5 @@ struct expr_ops expr_ops_payload = {
- 	.get		= nftnl_expr_payload_get,
- 	.parse		= nftnl_expr_payload_parse,
- 	.build		= nftnl_expr_payload_build,
--	.snprintf	= nftnl_expr_payload_snprintf,
-+	.snprintf_	= nftnl_expr_payload_snprintf,
- };
-diff --git a/src/expr/queue.c b/src/expr/queue.c
-index 8f70977..6bc76ef 100644
---- a/src/expr/queue.c
-+++ b/src/expr/queue.c
-@@ -193,5 +193,5 @@ struct expr_ops expr_ops_queue = {
- 	.get		= nftnl_expr_queue_get,
- 	.parse		= nftnl_expr_queue_parse,
- 	.build		= nftnl_expr_queue_build,
--	.snprintf	= nftnl_expr_queue_snprintf,
-+	.snprintf_	= nftnl_expr_queue_snprintf,
- };
-diff --git a/src/expr/quota.c b/src/expr/quota.c
-index 8c841d8..1a5f2fa 100644
---- a/src/expr/quota.c
-+++ b/src/expr/quota.c
-@@ -147,5 +147,5 @@ struct expr_ops expr_ops_quota = {
- 	.get		= nftnl_expr_quota_get,
- 	.parse		= nftnl_expr_quota_parse,
- 	.build		= nftnl_expr_quota_build,
--	.snprintf	= nftnl_expr_quota_snprintf,
-+	.snprintf_	= nftnl_expr_quota_snprintf,
- };
-diff --git a/src/expr/range.c b/src/expr/range.c
-index f76843a..73a1930 100644
---- a/src/expr/range.c
-+++ b/src/expr/range.c
-@@ -213,5 +213,5 @@ struct expr_ops expr_ops_range = {
- 	.get		= nftnl_expr_range_get,
- 	.parse		= nftnl_expr_range_parse,
- 	.build		= nftnl_expr_range_build,
--	.snprintf	= nftnl_expr_range_snprintf,
-+	.snprintf_	= nftnl_expr_range_snprintf,
- };
-diff --git a/src/expr/redir.c b/src/expr/redir.c
-index 4f56cb4..51ec71c 100644
---- a/src/expr/redir.c
-+++ b/src/expr/redir.c
-@@ -167,5 +167,5 @@ struct expr_ops expr_ops_redir = {
- 	.get		= nftnl_expr_redir_get,
- 	.parse		= nftnl_expr_redir_parse,
- 	.build		= nftnl_expr_redir_build,
--	.snprintf	= nftnl_expr_redir_snprintf,
-+	.snprintf_	= nftnl_expr_redir_snprintf,
- };
-diff --git a/src/expr/reject.c b/src/expr/reject.c
-index 716d25c..acf32c2 100644
---- a/src/expr/reject.c
-+++ b/src/expr/reject.c
-@@ -134,5 +134,5 @@ struct expr_ops expr_ops_reject = {
- 	.get		= nftnl_expr_reject_get,
- 	.parse		= nftnl_expr_reject_parse,
- 	.build		= nftnl_expr_reject_build,
--	.snprintf	= nftnl_expr_reject_snprintf,
-+	.snprintf_	= nftnl_expr_reject_snprintf,
- };
-diff --git a/src/expr/rt.c b/src/expr/rt.c
-index 1ad9b2a..9f2fdf3 100644
---- a/src/expr/rt.c
-+++ b/src/expr/rt.c
-@@ -162,5 +162,5 @@ struct expr_ops expr_ops_rt = {
- 	.get		= nftnl_expr_rt_get,
- 	.parse		= nftnl_expr_rt_parse,
- 	.build		= nftnl_expr_rt_build,
--	.snprintf	= nftnl_expr_rt_snprintf,
-+	.snprintf_	= nftnl_expr_rt_snprintf,
- };
-diff --git a/src/expr/socket.c b/src/expr/socket.c
-index 02d86f8..49a126b 100644
---- a/src/expr/socket.c
-+++ b/src/expr/socket.c
-@@ -165,5 +165,5 @@ struct expr_ops expr_ops_socket = {
- 	.get		= nftnl_expr_socket_get,
- 	.parse		= nftnl_expr_socket_parse,
- 	.build		= nftnl_expr_socket_build,
--	.snprintf	= nftnl_expr_socket_snprintf,
-+	.snprintf_	= nftnl_expr_socket_snprintf,
- };
-diff --git a/src/expr/synproxy.c b/src/expr/synproxy.c
-index 630f3f4..b22ad2f 100644
---- a/src/expr/synproxy.c
-+++ b/src/expr/synproxy.c
-@@ -152,5 +152,5 @@ struct expr_ops expr_ops_synproxy = {
- 	.get		= nftnl_expr_synproxy_get,
- 	.parse		= nftnl_expr_synproxy_parse,
- 	.build		= nftnl_expr_synproxy_build,
--	.snprintf	= nftnl_expr_synproxy_snprintf,
-+	.snprintf_	= nftnl_expr_synproxy_snprintf,
- };
-diff --git a/src/expr/target.c b/src/expr/target.c
-index b7c595a..31a039c 100644
---- a/src/expr/target.c
-+++ b/src/expr/target.c
-@@ -189,5 +189,5 @@ struct expr_ops expr_ops_target = {
- 	.get		= nftnl_expr_target_get,
- 	.parse		= nftnl_expr_target_parse,
- 	.build		= nftnl_expr_target_build,
--	.snprintf	= nftnl_expr_target_snprintf,
-+	.snprintf_	= nftnl_expr_target_snprintf,
- };
-diff --git a/src/expr/tproxy.c b/src/expr/tproxy.c
-index d3ee8f8..1b01591 100644
---- a/src/expr/tproxy.c
-+++ b/src/expr/tproxy.c
-@@ -170,5 +170,5 @@ struct expr_ops expr_ops_tproxy = {
- 	.get		= nftnl_expr_tproxy_get,
- 	.parse		= nftnl_expr_tproxy_parse,
- 	.build		= nftnl_expr_tproxy_build,
--	.snprintf	= nftnl_expr_tproxy_snprintf,
-+	.snprintf_	= nftnl_expr_tproxy_snprintf,
- };
-diff --git a/src/expr/tunnel.c b/src/expr/tunnel.c
-index 1460fd2..6c2f653 100644
---- a/src/expr/tunnel.c
-+++ b/src/expr/tunnel.c
-@@ -145,5 +145,5 @@ struct expr_ops expr_ops_tunnel = {
- 	.get		= nftnl_expr_tunnel_get,
- 	.parse		= nftnl_expr_tunnel_parse,
- 	.build		= nftnl_expr_tunnel_build,
--	.snprintf	= nftnl_expr_tunnel_snprintf,
-+	.snprintf_	= nftnl_expr_tunnel_snprintf,
- };
-diff --git a/src/expr/xfrm.c b/src/expr/xfrm.c
-index c81d14d..e648ee5 100644
---- a/src/expr/xfrm.c
-+++ b/src/expr/xfrm.c
-@@ -196,5 +196,5 @@ struct expr_ops expr_ops_xfrm = {
- 	.get		= nftnl_expr_xfrm_get,
- 	.parse		= nftnl_expr_xfrm_parse,
- 	.build		= nftnl_expr_xfrm_build,
--	.snprintf	= nftnl_expr_xfrm_snprintf,
-+	.snprintf_	= nftnl_expr_xfrm_snprintf,
- };
-diff --git a/src/obj/counter.c b/src/obj/counter.c
-index ef0cd20..0c199f7 100644
---- a/src/obj/counter.c
-+++ b/src/obj/counter.c
-@@ -127,5 +127,5 @@ struct obj_ops obj_ops_counter = {
- 	.get		= nftnl_obj_counter_get,
- 	.parse		= nftnl_obj_counter_parse,
- 	.build		= nftnl_obj_counter_build,
--	.snprintf	= nftnl_obj_counter_snprintf,
-+	.snprintf_	= nftnl_obj_counter_snprintf,
- };
-diff --git a/src/obj/ct_expect.c b/src/obj/ct_expect.c
-index 8136ad9..b3e1d70 100644
---- a/src/obj/ct_expect.c
-+++ b/src/obj/ct_expect.c
-@@ -196,5 +196,5 @@ struct obj_ops obj_ops_ct_expect = {
- 	.get		= nftnl_obj_ct_expect_get,
- 	.parse		= nftnl_obj_ct_expect_parse,
- 	.build		= nftnl_obj_ct_expect_build,
--	.snprintf	= nftnl_obj_ct_expect_snprintf,
-+	.snprintf_	= nftnl_obj_ct_expect_snprintf,
- };
-diff --git a/src/obj/ct_helper.c b/src/obj/ct_helper.c
-index c52032a..12b783c 100644
---- a/src/obj/ct_helper.c
-+++ b/src/obj/ct_helper.c
-@@ -150,5 +150,5 @@ struct obj_ops obj_ops_ct_helper = {
- 	.get		= nftnl_obj_ct_helper_get,
- 	.parse		= nftnl_obj_ct_helper_parse,
- 	.build		= nftnl_obj_ct_helper_build,
--	.snprintf	= nftnl_obj_ct_helper_snprintf,
-+	.snprintf_	= nftnl_obj_ct_helper_snprintf,
- };
-diff --git a/src/obj/ct_timeout.c b/src/obj/ct_timeout.c
-index 1d4f8fb..0a12883 100644
---- a/src/obj/ct_timeout.c
-+++ b/src/obj/ct_timeout.c
-@@ -316,5 +316,5 @@ struct obj_ops obj_ops_ct_timeout = {
- 	.get		= nftnl_obj_ct_timeout_get,
- 	.parse		= nftnl_obj_ct_timeout_parse,
- 	.build		= nftnl_obj_ct_timeout_build,
--	.snprintf	= nftnl_obj_ct_timeout_snprintf,
-+	.snprintf_	= nftnl_obj_ct_timeout_snprintf,
- };
-diff --git a/src/obj/limit.c b/src/obj/limit.c
-index 8b40f9d..2f049b8 100644
---- a/src/obj/limit.c
-+++ b/src/obj/limit.c
-@@ -168,5 +168,5 @@ struct obj_ops obj_ops_limit = {
- 	.get		= nftnl_obj_limit_get,
- 	.parse		= nftnl_obj_limit_parse,
- 	.build		= nftnl_obj_limit_build,
--	.snprintf	= nftnl_obj_limit_snprintf,
-+	.snprintf_	= nftnl_obj_limit_snprintf,
- };
-diff --git a/src/obj/quota.c b/src/obj/quota.c
-index 8ab3300..8666334 100644
---- a/src/obj/quota.c
-+++ b/src/obj/quota.c
-@@ -144,5 +144,5 @@ struct obj_ops obj_ops_quota = {
- 	.get		= nftnl_obj_quota_get,
- 	.parse		= nftnl_obj_quota_parse,
- 	.build		= nftnl_obj_quota_build,
--	.snprintf	= nftnl_obj_quota_snprintf,
-+	.snprintf_	= nftnl_obj_quota_snprintf,
- };
-diff --git a/src/obj/secmark.c b/src/obj/secmark.c
-index 2ccc803..e96e06f 100644
---- a/src/obj/secmark.c
-+++ b/src/obj/secmark.c
-@@ -116,5 +116,5 @@ struct obj_ops obj_ops_secmark = {
- 	.get		= nftnl_obj_secmark_get,
- 	.parse		= nftnl_obj_secmark_parse,
- 	.build		= nftnl_obj_secmark_build,
--	.snprintf	= nftnl_obj_secmark_snprintf,
-+	.snprintf_	= nftnl_obj_secmark_snprintf,
- };
-diff --git a/src/obj/synproxy.c b/src/obj/synproxy.c
-index d689fee..d06cb6d 100644
---- a/src/obj/synproxy.c
-+++ b/src/obj/synproxy.c
-@@ -143,5 +143,5 @@ struct obj_ops obj_ops_synproxy = {
- 	.get		= nftnl_obj_synproxy_get,
- 	.parse		= nftnl_obj_synproxy_parse,
- 	.build		= nftnl_obj_synproxy_build,
--	.snprintf	= nftnl_obj_synproxy_snprintf,
-+	.snprintf_	= nftnl_obj_synproxy_snprintf,
- };
-diff --git a/src/obj/tunnel.c b/src/obj/tunnel.c
-index 5ede6bd..d3743ff 100644
---- a/src/obj/tunnel.c
-+++ b/src/obj/tunnel.c
-@@ -547,5 +547,5 @@ struct obj_ops obj_ops_tunnel = {
- 	.get		= nftnl_obj_tunnel_get,
- 	.parse		= nftnl_obj_tunnel_parse,
- 	.build		= nftnl_obj_tunnel_build,
--	.snprintf	= nftnl_obj_tunnel_snprintf,
-+	.snprintf_	= nftnl_obj_tunnel_snprintf,
- };
-diff --git a/src/object.c b/src/object.c
-index 46e208b..d321c50 100644
---- a/src/object.c
-+++ b/src/object.c
-@@ -396,7 +396,7 @@ static int nftnl_obj_snprintf_dflt(char *buf, size_t remain,
- 	SNPRINTF_BUFFER_SIZE(ret, remain, offset);
- 
- 	if (obj->ops) {
--		ret = obj->ops->snprintf(buf + offset, remain, flags, obj);
-+		ret = obj->ops->snprintf_(buf + offset, remain, flags, obj);
- 		SNPRINTF_BUFFER_SIZE(ret, remain, offset);
- 	}
- 	ret = snprintf(buf + offset, remain, "]");
--- 
-2.33.1
-
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl_1.2.2.bb b/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl_1.2.3.bb
similarity index 89%
rename from meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl_1.2.2.bb
rename to meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl_1.2.3.bb
index 3eca92d..ab55767 100644
--- a/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl_1.2.2.bb
+++ b/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl_1.2.3.bb
@@ -2,28 +2,27 @@
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://COPYING;md5=79808397c3355f163c012616125c9e26"
 SECTION = "libs"
-DEPENDS = "libmnl"
 
-SRCREV = "f6575131e60ab10f131ea3ff36f69af2b6c3f614"
 SRC_URI = "git://git.netfilter.org/libnftnl;branch=master \
-           file://0001-avoid-naming-local-function-as-one-of-printf-family.patch \
            file://0001-configure.ac-Add-serial-tests.patch \
            file://run-ptest \
            "
+SRCREV = "817c8b66f1ea8c223b7513d4cd7bff525d8a0a9f"
 
 S = "${WORKDIR}/git"
 
 inherit autotools pkgconfig ptest
 
+DEPENDS = "libmnl"
 RDEPENDS:${PN}-ptest += " bash python3-core make"
- 
+
 TESTDIR = "tests"
 
 do_compile_ptest() {
     cp -rf ${S}/build-aux .
     oe_runmake buildtest-TESTS
 }
- 
+
 do_install_ptest() {
     cp -rf ${B}/build-aux ${D}${PTEST_PATH}
     install -d ${D}${PTEST_PATH}/${TESTDIR}
@@ -38,4 +37,3 @@
     # other nonexistent paths before running the actual tests
     sed -i 's/^Makefile/_Makefile/'  ${D}${PTEST_PATH}/${TESTDIR}/Makefile
 }
-
diff --git a/meta-openembedded/meta-networking/recipes-filter/nftables/nftables_1.0.4.bb b/meta-openembedded/meta-networking/recipes-filter/nftables/nftables_1.0.5.bb
similarity index 95%
rename from meta-openembedded/meta-networking/recipes-filter/nftables/nftables_1.0.4.bb
rename to meta-openembedded/meta-networking/recipes-filter/nftables/nftables_1.0.5.bb
index 3466e16..1708786 100644
--- a/meta-openembedded/meta-networking/recipes-filter/nftables/nftables_1.0.4.bb
+++ b/meta-openembedded/meta-networking/recipes-filter/nftables/nftables_1.0.5.bb
@@ -11,7 +11,7 @@
            file://run-ptest \
           "
 
-SRC_URI[sha256sum] = "927fb1fea1f685a328c10cf791eb655d7e1ed49d310eea5cb3101dfd8d6cba35"
+SRC_URI[sha256sum] = "8d1b4b18393af43698d10baa25d2b9b6397969beecac7816c35dd0714e4de50a"
 
 inherit autotools manpages pkgconfig ptest
 
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-bgpd-avoid-notify-race-between-io-and-main-pthreads.patch b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-bgpd-avoid-notify-race-between-io-and-main-pthreads.patch
new file mode 100644
index 0000000..40284d6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-bgpd-avoid-notify-race-between-io-and-main-pthreads.patch
@@ -0,0 +1,151 @@
+From 71ca5b09bc71e8cbe38177cf41e83fe164e52eee Mon Sep 17 00:00:00 2001
+From: Mark Stapp <mstapp@nvidia.com>
+Date: Thu, 8 Sep 2022 16:14:36 -0400
+Subject: [PATCH] bgpd: avoid notify race between io and main pthreads
+
+The "bgp_notify_" apis in bgp_packet.c generate a notification
+to a peer, usually during error handling. The io pthread wants
+to send notifications in a couple of cases during early
+received-packet validation - but the existing api interacts
+with the peer struct itself, and that's not safe.
+
+Add a new api for use by the io pthread, and adjust the main
+notify api so that it can avoid touching the peer struct.
+
+Signed-off-by: Mark Stapp <mstapp@nvidia.com>
+
+CVE: CVE-2022-37035
+
+Upstream-Status: Backport
+[https://github.com/FRRouting/frr/commit/71ca5b09bc71e8cbe38177cf41e83fe164e52eee]
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ bgpd/bgp_io.c     | 17 ++++++++---------
+ bgpd/bgp_packet.c | 32 ++++++++++++++++++++++++++++----
+ bgpd/bgp_packet.h |  2 ++
+ 3 files changed, 38 insertions(+), 13 deletions(-)
+
+diff --git a/bgpd/bgp_io.c b/bgpd/bgp_io.c
+index 7af1fae28..f9bb8d518 100644
+--- a/bgpd/bgp_io.c
++++ b/bgpd/bgp_io.c
+@@ -37,7 +37,7 @@
+ #include "bgpd/bgp_debug.h"	// for bgp_debug_neighbor_events, bgp_type_str
+ #include "bgpd/bgp_errors.h"	// for expanded error reference information
+ #include "bgpd/bgp_fsm.h"	// for BGP_EVENT_ADD, bgp_event
+-#include "bgpd/bgp_packet.h"	// for bgp_notify_send_with_data, bgp_notify...
++#include "bgpd/bgp_packet.h"	// for bgp_notify_io_invalid...
+ #include "bgpd/bgp_trace.h"	// for frrtraces
+ #include "bgpd/bgpd.h"		// for peer, BGP_MARKER_SIZE, bgp_master, bm
+ /* clang-format on */
+@@ -526,8 +526,8 @@ static bool validate_header(struct peer *peer)
+ 		return false;
+ 
+ 	if (memcmp(m_correct, m_rx, BGP_MARKER_SIZE) != 0) {
+-		bgp_notify_send(peer, BGP_NOTIFY_HEADER_ERR,
+-				BGP_NOTIFY_HEADER_NOT_SYNC);
++		bgp_notify_io_invalid(peer, BGP_NOTIFY_HEADER_ERR,
++				      BGP_NOTIFY_HEADER_NOT_SYNC, NULL, 0);
+ 		return false;
+ 	}
+ 
+@@ -547,9 +547,8 @@ static bool validate_header(struct peer *peer)
+ 			zlog_debug("%s unknown message type 0x%02x", peer->host,
+ 				   type);
+ 
+-		bgp_notify_send_with_data(peer, BGP_NOTIFY_HEADER_ERR,
+-					  BGP_NOTIFY_HEADER_BAD_MESTYPE, &type,
+-					  1);
++		bgp_notify_io_invalid(peer, BGP_NOTIFY_HEADER_ERR,
++				      BGP_NOTIFY_HEADER_BAD_MESTYPE, &type, 1);
+ 		return false;
+ 	}
+ 
+@@ -574,9 +573,9 @@ static bool validate_header(struct peer *peer)
+ 
+ 		uint16_t nsize = htons(size);
+ 
+-		bgp_notify_send_with_data(peer, BGP_NOTIFY_HEADER_ERR,
+-					  BGP_NOTIFY_HEADER_BAD_MESLEN,
+-					  (unsigned char *)&nsize, 2);
++		bgp_notify_io_invalid(peer, BGP_NOTIFY_HEADER_ERR,
++				      BGP_NOTIFY_HEADER_BAD_MESLEN,
++				      (unsigned char *)&nsize, 2);
+ 		return false;
+ 	}
+ 
+diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
+index 7daac4494..90695219a 100644
+--- a/bgpd/bgp_packet.c
++++ b/bgpd/bgp_packet.c
+@@ -871,8 +871,9 @@ bool bgp_notify_received_hard_reset(struct peer *peer, uint8_t code,
+  * @param data      Data portion
+  * @param datalen   length of data portion
+  */
+-void bgp_notify_send_with_data(struct peer *peer, uint8_t code,
+-			       uint8_t sub_code, uint8_t *data, size_t datalen)
++static void bgp_notify_send_internal(struct peer *peer, uint8_t code,
++				     uint8_t sub_code, uint8_t *data,
++				     size_t datalen, bool use_curr)
+ {
+ 	struct stream *s;
+ 	bool hard_reset = bgp_notify_send_hard_reset(peer, code, sub_code);
+@@ -917,8 +918,11 @@ void bgp_notify_send_with_data(struct peer *peer, uint8_t code,
+ 	 * If possible, store last packet for debugging purposes. This check is
+ 	 * in place because we are sometimes called with a doppelganger peer,
+ 	 * who tends to have a plethora of fields nulled out.
++	 *
++	 * Some callers should not attempt this - the io pthread for example
++	 * should not touch internals of the peer struct.
+ 	 */
+-	if (peer->curr) {
++	if (use_curr && peer->curr) {
+ 		size_t packetsize = stream_get_endp(peer->curr);
+ 		assert(packetsize <= peer->max_packet_size);
+ 		memcpy(peer->last_reset_cause, peer->curr->data, packetsize);
+@@ -1001,7 +1005,27 @@ void bgp_notify_send_with_data(struct peer *peer, uint8_t code,
+  */
+ void bgp_notify_send(struct peer *peer, uint8_t code, uint8_t sub_code)
+ {
+-	bgp_notify_send_with_data(peer, code, sub_code, NULL, 0);
++	bgp_notify_send_internal(peer, code, sub_code, NULL, 0, true);
++}
++
++/*
++ * Enqueue notification; called from the main pthread, peer object access is ok.
++ */
++void bgp_notify_send_with_data(struct peer *peer, uint8_t code,
++			       uint8_t sub_code, uint8_t *data, size_t datalen)
++{
++	bgp_notify_send_internal(peer, code, sub_code, data, datalen, true);
++}
++
++/*
++ * For use by the io pthread, queueing a notification but avoiding access to
++ * the peer object.
++ */
++void bgp_notify_io_invalid(struct peer *peer, uint8_t code, uint8_t sub_code,
++			   uint8_t *data, size_t datalen)
++{
++	/* Avoid touching the peer object */
++	bgp_notify_send_internal(peer, code, sub_code, data, datalen, false);
+ }
+ 
+ /*
+diff --git a/bgpd/bgp_packet.h b/bgpd/bgp_packet.h
+index a0eb579db..9f6d772bc 100644
+--- a/bgpd/bgp_packet.h
++++ b/bgpd/bgp_packet.h
+@@ -62,6 +62,8 @@ extern void bgp_open_send(struct peer *);
+ extern void bgp_notify_send(struct peer *, uint8_t, uint8_t);
+ extern void bgp_notify_send_with_data(struct peer *, uint8_t, uint8_t,
+ 				      uint8_t *, size_t);
++void bgp_notify_io_invalid(struct peer *peer, uint8_t code, uint8_t sub_code,
++			   uint8_t *data, size_t datalen);
+ extern void bgp_route_refresh_send(struct peer *peer, afi_t afi, safi_t safi,
+ 				   uint8_t orf_type, uint8_t when_to_refresh,
+ 				   int remove, uint8_t subtype);
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-configure-Check-for-readline-function-instead-of-mai.patch b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-configure-Check-for-readline-function-instead-of-mai.patch
index 4b218a6..20e8472 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-configure-Check-for-readline-function-instead-of-mai.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-configure-Check-for-readline-function-instead-of-mai.patch
@@ -6,7 +6,9 @@
 main is not a function found in libreadline, its better to check for a
 function thats provided by it.
 
-Upstream-Status: Submitted [https://github.com/FRRouting/frr/pull/11893]
+Upstream-Status: Backport
+[https://github.com/FRRouting/frr/commit/9399d58c13257849179d3c2b3698a2b43bc1b2a0]
+
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
  configure.ac | 2 +-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-ospfd-Adding-SUPPORT_OSPF_API-define-in-ospf_spf.c.patch b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-ospfd-Adding-SUPPORT_OSPF_API-define-in-ospf_spf.c.patch
new file mode 100644
index 0000000..0998894
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-ospfd-Adding-SUPPORT_OSPF_API-define-in-ospf_spf.c.patch
@@ -0,0 +1,48 @@
+From ec3bb054c331f9d928ac21a1747e0f921b51dfbc Mon Sep 17 00:00:00 2001
+From: Michal Ruprich <michalruprich@gmail.com>
+Date: Tue, 6 Sep 2022 12:25:01 +0200
+Subject: [PATCH] ospfd: Adding SUPPORT_OSPF_API define in ospf_spf.c
+
+It is not possible to build ospf_spf.c file with --disable-ospfapi because
+ospf_apiserver.c has SUPPORT_OSPF_API around all function definitions and
+that results in an undefined reference to the ospf_apiserver_notify_reachable
+function error while building.
+
+Signed-off-by: Michal Ruprich <mruprich@redhat.com>
+
+Upstream-Status: Backport
+[https://github.com/FRRouting/frr/commit/ec3bb054c331f9d928ac21a1747e0f921b51dfbc]
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ ospfd/ospf_spf.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/ospfd/ospf_spf.c b/ospfd/ospf_spf.c
+index 46492ff6b..4edc1de81 100644
+--- a/ospfd/ospf_spf.c
++++ b/ospfd/ospf_spf.c
+@@ -48,7 +48,10 @@
+ #include "ospfd/ospf_sr.h"
+ #include "ospfd/ospf_ti_lfa.h"
+ #include "ospfd/ospf_errors.h"
++
++#ifdef SUPPORT_OSPF_API
+ #include "ospfd/ospf_apiserver.h"
++#endif
+ 
+ /* Variables to ensure a SPF scheduled log message is printed only once */
+ 
+@@ -1895,7 +1898,9 @@ static void ospf_spf_calculate_schedule_worker(struct thread *thread)
+ 	/* Update all routers routing table */
+ 	ospf->oall_rtrs = ospf->all_rtrs;
+ 	ospf->all_rtrs = all_rtrs;
++#ifdef SUPPORT_OSPF_API
+ 	ospf_apiserver_notify_reachable(ospf->oall_rtrs, ospf->all_rtrs);
++#endif
+ 
+ 	/* Free old ABR/ASBR routing table */
+ 	if (ospf->old_rtrs)
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr_8.2.2.bb b/meta-openembedded/meta-networking/recipes-protocols/frr/frr_8.3.1.bb
similarity index 95%
rename from meta-openembedded/meta-networking/recipes-protocols/frr/frr_8.2.2.bb
rename to meta-openembedded/meta-networking/recipes-protocols/frr/frr_8.3.1.bb
index 607ed8b..c69720e 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/frr/frr_8.2.2.bb
+++ b/meta-openembedded/meta-networking/recipes-protocols/frr/frr_8.3.1.bb
@@ -9,12 +9,14 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     file://COPYING-LGPLv2.1;md5=4fbd65380cdd255951079008b364516c"
 
-SRC_URI = "git://github.com/FRRouting/frr.git;protocol=https;branch=stable/8.2 \
+SRC_URI = "git://github.com/FRRouting/frr.git;protocol=https;branch=stable/8.3 \
            file://0001-configure-Check-for-readline-function-instead-of-mai.patch \
+           file://0001-ospfd-Adding-SUPPORT_OSPF_API-define-in-ospf_spf.c.patch \
+           file://0001-bgpd-avoid-notify-race-between-io-and-main-pthreads.patch \
            file://frr.pam \
 	      "
 
-SRCREV = "79188bf710e92acf42fb5b9b0a2e9593a5ee9b05"
+SRCREV = "a74f7a9ad9623e6f9654fe4a7177e5da0b194828"
 
 S = "${WORKDIR}/git"