Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: [email protected]
Control: affects -1 + src:bird2
User: [email protected]
Usertags: pu

This upload fixes in stable some significant bugs, as requested by the 
upstream maintainer.
These commits have been backported from the precedent stable release and 
have been in testing/unstable for some time.

I am also taking over maintenance of the package.

https://salsa.debian.org/md/bird/-/commits/debian/bird2/trixie

diff -Nru bird2-2.17.1/debian/bird2.bird.service 
bird2-2.17.1/debian/bird2.bird.service
--- bird2-2.17.1/debian/bird2.bird.service      2025-01-13 16:13:45.000000000 
+0100
+++ bird2-2.17.1/debian/bird2.bird.service      2025-12-18 00:21:35.000000000 
+0100
@@ -8,7 +8,7 @@
 ExecStartPre=/usr/sbin/bird -p
 ExecReload=/usr/sbin/birdc configure
 ExecStart=/usr/sbin/bird -f -u $BIRD_RUN_USER -g $BIRD_RUN_GROUP $BIRD_ARGS
-Restart=on-abort
+Restart=on-abnormal
 
 [Install]
 WantedBy=multi-user.target
diff -Nru bird2-2.17.1/debian/changelog bird2-2.17.1/debian/changelog
--- bird2-2.17.1/debian/changelog       2025-05-06 16:20:00.000000000 +0200
+++ bird2-2.17.1/debian/changelog       2025-12-18 00:21:35.000000000 +0100
@@ -1,3 +1,16 @@
+bird2 (2.17.1-1+deb13u1) stable; urgency=medium
+
+  * New maintainer.
+  * Use Restart=on-abnormal instead of on-abort. (Closes: #1099513)
+  * Backport all fixes from upstream 2.17.3:
+    + RAdv: Fix flags for deprecated prefixes.
+    + BMP: Fix crash when exporting a route with non-bgp attributes.
+  * Backport all fixes from upstream 2.17.2:
+    + ASPA check fix for AS_SET.
+    + Invalid check fix in text_or_ipa grammar.
+
+ -- Marco d'Itri <[email protected]>  Thu, 18 Dec 2025 00:21:35 +0100
+
 bird2 (2.17.1-1) unstable; urgency=medium
 
   * New upstream version 2.17.1
diff -Nru bird2-2.17.1/debian/control bird2-2.17.1/debian/control
--- bird2-2.17.1/debian/control 2025-01-13 16:13:45.000000000 +0100
+++ bird2-2.17.1/debian/control 2025-12-18 00:21:35.000000000 +0100
@@ -16,10 +16,10 @@
  linuxdoc-tools-latex,
  opensp,
  texlive-latex-extra,
-Maintainer: Jakub Ružička <[email protected]>
+Maintainer: Marco d'Itri <[email protected]>
 Standards-Version: 4.7.0
-Vcs-Browser: https://salsa.debian.org/debian/bird2
-Vcs-Git: https://salsa.debian.org/debian/bird2.git
+Vcs-Browser: https://salsa.debian.org/md/bird
+Vcs-Git: https://salsa.debian.org/md/bird.git -b debian/bird2/unstable
 Homepage: https://bird.network.cz/
 Rules-Requires-Root: no
 
diff -Nru bird2-2.17.1/debian/patches/backport-01-8f5b2196 
bird2-2.17.1/debian/patches/backport-01-8f5b2196
--- bird2-2.17.1/debian/patches/backport-01-8f5b2196    1970-01-01 
01:00:00.000000000 +0100
+++ bird2-2.17.1/debian/patches/backport-01-8f5b2196    2025-12-18 
00:21:35.000000000 +0100
@@ -0,0 +1,28 @@
+From 8f5b21964ece066d15794cf9d17be5b3906fe596 Mon Sep 17 00:00:00 2001
+From: Ondrej Zajicek <[email protected]>
+Date: Tue, 6 May 2025 14:50:53 +0200
+Subject: [PATCH] Conf: Fix invalid check in text_or_ipa grammar
+
+Can cause crash when a bad expression is used.
+---
+ conf/confbase.Y | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/conf/confbase.Y b/conf/confbase.Y
+index af64e3ff9..857689707 100644
+--- a/conf/confbase.Y
++++ b/conf/confbase.Y
+@@ -426,8 +426,8 @@ text_or_ipa:
+    }
+  | '(' term ')' {
+      $$ = cf_eval($2, T_VOID);
+-     if (($$.type != T_BYTESTRING) && ($$.type != T_STRING))
+-       cf_error("Bytestring or string value expected");
++     if (($$.type != T_STRING) && ($$.type != T_IP))
++       cf_error("String or IP value expected");
+    }
+  ;
+ 
+-- 
+GitLab
+
diff -Nru bird2-2.17.1/debian/patches/backport-02-067f361d 
bird2-2.17.1/debian/patches/backport-02-067f361d
--- bird2-2.17.1/debian/patches/backport-02-067f361d    1970-01-01 
01:00:00.000000000 +0100
+++ bird2-2.17.1/debian/patches/backport-02-067f361d    2025-12-18 
00:21:35.000000000 +0100
@@ -0,0 +1,88 @@
+From 067f361d9b6e2e1a0fa5d3bd62900e23b6ded4bb Mon Sep 17 00:00:00 2001
+From: Evann DREUMONT <[email protected]>
+Date: Tue, 2 Sep 2025 16:23:34 +0200
+Subject: [PATCH] Nest: Function aspa_check() should return ASPA_INVALID for
+ paths containing AS_SET
+
+The aspa_check() uses as_path_getlen() to estimate the size of a buffer,
+which does not work for AS_SET segments, because as_path_getlen() returns
+length 1 for them regardless of their length. This may cause buffer
+overflow and crash.
+
+As AS_SET segments are not valid for ASPA verification, we can just
+handle them explicitly. See 
https://datatracker.ietf.org/doc/html/draft-ietf-sidrops-aspa-verification#section-6
+
+Co-Authored-By: Alarig <[email protected]>
+
+Minor changes by committer.
+---
+ nest/a-path.c   | 21 +++++++++++++++++++++
+ nest/attrs.h    |  1 +
+ nest/rt-table.c |  7 ++++++-
+ 3 files changed, 28 insertions(+), 1 deletion(-)
+
+diff --git a/nest/a-path.c b/nest/a-path.c
+index aba2c86df..6f52ccf6a 100644
+--- a/nest/a-path.c
++++ b/nest/a-path.c
+@@ -177,6 +177,27 @@ as_path_contains_confed(const struct adata *path)
+   return 0;
+ }
+ 
++int
++as_path_contains_set(const struct adata *path)
++{
++  const byte *pos = path->data;
++  const byte *end = pos + path->length;
++
++  while (pos < end)
++  {
++    uint type = pos[0];
++    uint slen = 2 + BS * pos[1];
++
++    if ((type == AS_PATH_SET) ||
++      (type == AS_PATH_CONFED_SET))
++      return 1;
++
++    pos += slen;
++  }
++
++  return 0;
++}
++
+ struct adata *
+ as_path_strip_confed(struct linpool *pool, const struct adata *path)
+ {
+diff --git a/nest/attrs.h b/nest/attrs.h
+index 0475afa72..699b91df2 100644
+--- a/nest/attrs.h
++++ b/nest/attrs.h
+@@ -36,6 +36,7 @@ int as_path_16to32(byte *dst, const byte *src, uint len);
+ int as_path_32to16(byte *dst, const byte *src, uint len);
+ int as_path_contains_as4(const struct adata *path);
+ int as_path_contains_confed(const struct adata *path);
++int as_path_contains_set(const struct adata *path);
+ struct adata *as_path_strip_confed(struct linpool *pool, const struct adata 
*op);
+ struct adata *as_path_prepend2(struct linpool *pool, const struct adata *op, 
int seq, u32 as);
+ struct adata *as_path_to_old(struct linpool *pool, const struct adata *path);
+diff --git a/nest/rt-table.c b/nest/rt-table.c
+index ee3f11882..ed364d351 100644
+--- a/nest/rt-table.c
++++ b/nest/rt-table.c
+@@ -362,7 +362,12 @@ enum aspa_result aspa_check(rtable *tab, const adata 
*path, bool force_upstream)
+   if (as_path_contains_confed(path))
+     return ASPA_INVALID;
+ 
+-  /* Check path length */
++  /* No support for AS_SET */
++  /* See draft-ietf-sidrops-aspa-verification section 6 */
++  if (as_path_contains_set(path))
++    return ASPA_INVALID;
++
++  /* Check path length; we assume just AS_SEQUENCE segments */
+   uint len = as_path_getlen(path);
+   if (len == 0)
+     return ASPA_INVALID;
+-- 
+GitLab
+
diff -Nru bird2-2.17.1/debian/patches/backport-03-f8770e81 
bird2-2.17.1/debian/patches/backport-03-f8770e81
--- bird2-2.17.1/debian/patches/backport-03-f8770e81    1970-01-01 
01:00:00.000000000 +0100
+++ bird2-2.17.1/debian/patches/backport-03-f8770e81    2025-12-18 
00:21:35.000000000 +0100
@@ -0,0 +1,25 @@
+From f8770e816ac17df535c32b52e79a7ccffaea9bcc Mon Sep 17 00:00:00 2001
+From: Maria Matejka <[email protected]>
+Date: Thu, 20 Nov 2025 14:35:02 +0100
+Subject: [PATCH] BMP: Fix crash when exporting a route with non-bgp attributes
+
+Reported-By: Annika Hannig
+---
+ proto/bgp/packets.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/proto/bgp/packets.c b/proto/bgp/packets.c
+index 0971107ce..157afdd90 100644
+--- a/proto/bgp/packets.c
++++ b/proto/bgp/packets.c
+@@ -2550,6 +2550,7 @@ bgp_create_update_bmp(struct bgp_channel *c, byte *buf, 
byte *end, struct bgp_bu
+     .add_path = c->add_path_rx,
+     .mpls = c->desc->mpls,
+     .sham = 1,
++    .ignore_non_bgp_attrs = 1,
+   };
+ 
+   if (!update)
+-- 
+GitLab
+
diff -Nru bird2-2.17.1/debian/patches/backport-04-c4d54c21 
bird2-2.17.1/debian/patches/backport-04-c4d54c21
--- bird2-2.17.1/debian/patches/backport-04-c4d54c21    1970-01-01 
01:00:00.000000000 +0100
+++ bird2-2.17.1/debian/patches/backport-04-c4d54c21    2025-12-18 
00:21:35.000000000 +0100
@@ -0,0 +1,68 @@
+From c4d54c21fd773557e8b91b9fc11e00436801b09a Mon Sep 17 00:00:00 2001
+From: Ondrej Zajicek <[email protected]>
+Date: Thu, 27 Nov 2025 17:59:44 +0100
+Subject: [PATCH] RAdv: Fix flags for deprecated prefixes
+
+When a prefix is deprecated (valid_lifetime == 0), it should be
+announced with the same flags as before. The old code announced it
+without any flags, which leads to being ignored by recipients.
+
+Note that a prefix could be depreacted for two reason - it is removed
+from the interface, or it is deconfigured in BIRD configuration.
+
+Thanks to Michael Saxl for the bugreport.
+
+Fixes: #323
+---
+ proto/radv/packets.c | 4 ++--
+ proto/radv/radv.c    | 4 ++++
+ proto/radv/radv.h    | 3 +++
+ 3 files changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/proto/radv/packets.c b/proto/radv/packets.c
+index 77c987949..8b060a206 100644
+--- a/proto/radv/packets.c
++++ b/proto/radv/packets.c
+@@ -306,8 +306,8 @@ radv_prepare_prefix(struct radv_iface *ifa, struct 
radv_prefix *px,
+   op->type = OPT_PREFIX;
+   op->length = 4;
+   op->pxlen = px->prefix.pxlen;
+-  op->flags = (pc->onlink ? OPT_PX_ONLINK : 0) |
+-    (pc->autonomous ? OPT_PX_AUTONOMOUS : 0);
++  op->flags = (px->onlink ? OPT_PX_ONLINK : 0) |
++            (px->autonomous ? OPT_PX_AUTONOMOUS : 0);
+   op->valid_lifetime = (ifa->ra->active || !pc->valid_lifetime_sensitive) ?
+     htonl(pc->valid_lifetime) : 0;
+   op->preferred_lifetime = (ifa->ra->active || 
!pc->preferred_lifetime_sensitive) ?
+diff --git a/proto/radv/radv.c b/proto/radv/radv.c
+index ba31e1a84..4ff075713 100644
+--- a/proto/radv/radv.c
++++ b/proto/radv/radv.c
+@@ -161,6 +161,10 @@ radv_prepare_prefixes(struct radv_iface *ifa)
+     existing->valid = 1;
+     existing->changed = now;
+     existing->mark = 1;
++
++    existing->onlink = pc->onlink;
++    existing->autonomous = pc->autonomous;
++
+     existing->cf = pc;
+   }
+ 
+diff --git a/proto/radv/radv.h b/proto/radv/radv.h
+index ba4a1b6c7..d4d3a50f3 100644
+--- a/proto/radv/radv.h
++++ b/proto/radv/radv.h
+@@ -170,6 +170,9 @@ struct radv_prefix         /* One prefix we advertise */
+   u8 valid;                   /* Is the prefix valid? If not, we advertise it
+                                  with 0 lifetime, so clients stop using it */
+   u8 mark;                    /* A temporary mark for processing */
++  u8 onlink;                  /* Flags copied from prefix config */
++  u8 autonomous;
++
+   btime changed;              /* Last time when the prefix changed */
+   struct radv_prefix_config *cf; /* The config tied to this prefix */
+ };
+-- 
+GitLab
+
diff -Nru bird2-2.17.1/debian/patches/series bird2-2.17.1/debian/patches/series
--- bird2-2.17.1/debian/patches/series  1970-01-01 01:00:00.000000000 +0100
+++ bird2-2.17.1/debian/patches/series  2025-12-18 00:21:35.000000000 +0100
@@ -0,0 +1,4 @@
+backport-01-8f5b2196
+backport-02-067f361d
+backport-03-f8770e81
+backport-04-c4d54c21

-- 
ciao,
Marco

Attachment: signature.asc
Description: PGP signature

Reply via email to