summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_route.c7
-rw-r--r--lib/elf_py.c29
-rw-r--r--ospfd/ospf_interface.c2
3 files changed, 20 insertions, 18 deletions
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index d4a63e6369..b8bcae6e0d 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -2113,10 +2113,11 @@ bool subgroup_announce_check(struct bgp_dest *dest, struct bgp_path_info *pi,
if (ret == RMAP_DENYMATCH) {
if (bgp_debug_update(NULL, p, subgrp->update_group, 0))
zlog_debug(
- "%s [Update:SEND] %pFX is filtered by route-map",
- peer->host, p);
+ "%s [Update:SEND] %pFX is filtered by route-map '%s'",
+ peer->host, p,
+ ROUTE_MAP_OUT_NAME(filter));
- bgp_attr_flush(attr);
+ bgp_attr_flush(&dummy_attr);
return false;
}
}
diff --git a/lib/elf_py.c b/lib/elf_py.c
index b47aa3d795..c7f0819e8d 100644
--- a/lib/elf_py.c
+++ b/lib/elf_py.c
@@ -1065,26 +1065,25 @@ static void elffile_add_dynreloc(struct elffile *w, Elf_Data *reldata,
* always be a pointer...
*/
if (elffile_virt2file(w, rel->r_offset, &offs)) {
- Elf_Data *ptr, *conv;
- GElf_Addr tmp;
- Elf_Data mem = {
- .d_buf = (void *)&tmp,
- .d_type = ELF_T_ADDR,
- .d_version = EV_CURRENT,
- .d_size = sizeof(tmp),
- .d_off = 0,
- .d_align = 0,
- };
+ Elf_Data *ptr;
+ /* NB: this endian-converts! */
ptr = elf_getdata_rawchunk(w->elf, offs,
w->elfclass / 8,
ELF_T_ADDR);
- conv = gelf_xlatetom(w->elf, &mem, ptr,
- w->mmap[EI_DATA]);
- if (conv) {
- memcpy(&rel_offs, conv->d_buf,
- conv->d_size);
+ if (ptr) {
+ char *dst = (char *)&rel_offs;
+
+ /* sigh. it endian-converts. but
+ * doesn't size-convert.
+ */
+ if (BYTE_ORDER == BIG_ENDIAN &&
+ ptr->d_size < sizeof(rel_offs))
+ dst += sizeof(rel_offs) -
+ ptr->d_size;
+
+ memcpy(dst, ptr->d_buf, ptr->d_size);
relw->relative = false;
relw->rela->r_addend = rel_offs;
diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c
index edbacdcff7..7f46e6db84 100644
--- a/ospfd/ospf_interface.c
+++ b/ospfd/ospf_interface.c
@@ -846,6 +846,8 @@ int ospf_if_down(struct ospf_interface *oi)
/* Shutdown packet reception and sending */
ospf_if_stream_unset(oi);
+ if (!ospf->new_table)
+ return 1;
for (rn = route_top(ospf->new_table); rn; rn = route_next(rn)) {
or = rn->info;