diff --git a/SOURCES/openvswitch-3.1.0.patch b/SOURCES/openvswitch-3.1.0.patch
index eb8a3d5..8f4d15d 100644
--- a/SOURCES/openvswitch-3.1.0.patch
+++ b/SOURCES/openvswitch-3.1.0.patch
@@ -4495,7 +4495,7 @@ index 72cb954711..1c61535068 100644
          } else {
              unixctl_command_reply_error(conn, error);
 diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
-index 65bdd51dba..94b99a7be5 100644
+index 65bdd51dba..4eed2eb43a 100644
 --- a/lib/netdev-linux.c
 +++ b/lib/netdev-linux.c
 @@ -2712,8 +2712,16 @@ tc_add_matchall_policer(struct netdev *netdev, uint32_t kbits_rate,
@@ -4579,6 +4579,16 @@ index 65bdd51dba..94b99a7be5 100644
          *handlep = tc->tcm_handle;
      }
  
+@@ -6481,7 +6496,8 @@ get_stats_via_netlink(const struct netdev *netdev_, struct netdev_stats *stats)
+             struct rtnl_link_stats64 aligned_lstats;
+ 
+             if (!IS_PTR_ALIGNED(lstats)) {
+-                memcpy(&aligned_lstats, lstats, sizeof aligned_lstats);
++                memcpy(&aligned_lstats, (void *) lstats,
++                       sizeof aligned_lstats);
+                 lstats = &aligned_lstats;
+             }
+             netdev_stats_from_rtnl_link_stats64(stats, lstats);
 diff --git a/lib/netdev-native-tnl.c b/lib/netdev-native-tnl.c
 index b89dfdd52a..6c90946388 100644
 --- a/lib/netdev-native-tnl.c
@@ -6410,7 +6420,7 @@ index 8626aac8d5..1fcc7b0920 100644
  void packet_set_udp_port(struct dp_packet *, ovs_be16 src, ovs_be16 dst);
  void packet_set_sctp_port(struct dp_packet *, ovs_be16 src, ovs_be16 dst);
 diff --git a/lib/route-table.c b/lib/route-table.c
-index ac82cf262f..6df7237e10 100644
+index ac82cf262f..e8f0623fa5 100644
 --- a/lib/route-table.c
 +++ b/lib/route-table.c
 @@ -26,6 +26,7 @@
@@ -6430,16 +6440,29 @@ index ac82cf262f..6df7237e10 100644
  struct route_data {
      /* Copied from struct rtmsg. */
      unsigned char rtm_dst_len;
-@@ -79,7 +82,7 @@ static struct nln_notifier *name_notifier = NULL;
+@@ -79,9 +82,9 @@ static struct nln_notifier *name_notifier = NULL;
  
  static bool route_table_valid = false;
  
 -static int route_table_reset(void);
 +static void route_table_reset(void);
  static void route_table_handle_msg(const struct route_table_msg *);
- static int route_table_parse(struct ofpbuf *, struct route_table_msg *);
+-static int route_table_parse(struct ofpbuf *, struct route_table_msg *);
++static int route_table_parse(struct ofpbuf *, void *change);
  static void route_table_change(const struct route_table_msg *, void *);
-@@ -152,26 +155,22 @@ route_table_wait(void)
+ static void route_map_clear(void);
+ 
+@@ -106,8 +109,7 @@ route_table_init(void)
+     ovs_assert(!route6_notifier);
+ 
+     ovs_router_init();
+-    nln = nln_create(NETLINK_ROUTE, (nln_parse_func *) route_table_parse,
+-                     &rtmsg);
++    nln = nln_create(NETLINK_ROUTE, route_table_parse, &rtmsg);
+ 
+     route_notifier =
+         nln_notifier_create(nln, RTNLGRP_IPV4_ROUTE,
+@@ -152,26 +154,22 @@ route_table_wait(void)
      ovs_mutex_unlock(&route_table_mutex);
  }
  
@@ -6475,7 +6498,7 @@ index ac82cf262f..6df7237e10 100644
  
      nl_dump_start(&dump, NETLINK_ROUTE, &request);
      ofpbuf_uninit(&request);
-@@ -181,12 +180,43 @@ route_table_reset(void)
+@@ -181,19 +179,51 @@ route_table_reset(void)
          struct route_table_msg msg;
  
          if (route_table_parse(&reply, &msg)) {
@@ -6520,6 +6543,15 @@ index ac82cf262f..6df7237e10 100644
  }
  
  /* Return RTNLGRP_IPV4_ROUTE or RTNLGRP_IPV6_ROUTE on success, 0 on parse
+  * error. */
+ static int
+-route_table_parse(struct ofpbuf *buf, struct route_table_msg *change)
++route_table_parse(struct ofpbuf *buf, void *change_)
+ {
++    struct route_table_msg *change = change_;
+     bool parsed, ipv4 = false;
+ 
+     static const struct nl_policy policy[] = {
 @@ -201,6 +231,7 @@ route_table_parse(struct ofpbuf *buf, struct route_table_msg *change)
          [RTA_OIF] = { .type = NL_A_U32, .optional = true },
          [RTA_GATEWAY] = { .type = NL_A_U32, .optional = true },
diff --git a/SPECS/openvswitch3.1.spec b/SPECS/openvswitch3.1.spec
index ffb8bb6..8277e77 100644
--- a/SPECS/openvswitch3.1.spec
+++ b/SPECS/openvswitch3.1.spec
@@ -57,7 +57,7 @@ Summary: Open vSwitch
 Group: System Environment/Daemons daemon/database/utilities
 URL: http://www.openvswitch.org/
 Version: 3.1.0
-Release: 128%{?dist}
+Release: 129%{?dist}
 
 # Nearly all of openvswitch is ASL 2.0.  The bugtool is LGPLv2+, and the
 # lib/sflow*.[ch] files are SISSL
@@ -756,6 +756,13 @@ exit 0
 %endif
 
 %changelog
+* Wed Aug 14 2024 Open vSwitch CI <ovs-ci@redhat.com> - 3.1.0-129
+- Merging upstream branch-3.1 [RH git: c2c244d6c4]
+    Commit list:
+    120050c26f netdev-linux: Fix unaligned access to rpl_rtnl_link_stats64.
+    a480602cdf route-table: Fix another UBsan warning about pointer type.
+
+
 * Thu Aug 08 2024 Open vSwitch CI <ovs-ci@redhat.com> - 3.1.0-128
 - Merging upstream branch-3.1 [RH git: 7b8b03b283]
     Commit list: