lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 25 Nov 2022 10:12:51 +0100 From: Jiri Pirko <jiri@...nulli.us> To: netdev@...r.kernel.org Cc: stephen@...workplumber.org, dsahern@...il.com Subject: [patch iproute2-main REPOST] devlink: load ifname map on demand from ifname_map_rev_lookup() as well From: Jiri Pirko <jiri@...dia.com> Commit 5cddbb274eab ("devlink: load port-ifname map on demand") changed the ifname map to be loaded on demand from ifname_map_lookup(). However, it didn't put this on-demand loading into ifname_map_rev_lookup() which causes ifname_map_rev_lookup() to return -ENOENT all the time. Fix this by triggering on-demand ifname map load from ifname_map_rev_lookup() as well. Fixes: 5cddbb274eab ("devlink: load port-ifname map on demand") Signed-off-by: Jiri Pirko <jiri@...dia.com> --- devlink/devlink.c | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index 8aefa101b2f8..150b4e63ead1 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -838,6 +838,23 @@ static int ifname_map_load(struct dl *dl) return 0; } +static int ifname_map_check_load(struct dl *dl) +{ + int err; + + if (dl->map_loaded) + return 0; + + err = ifname_map_load(dl); + if (err) { + pr_err("Failed to create index map\n"); + return err; + } + dl->map_loaded = true; + return 0; +} + + static int ifname_map_lookup(struct dl *dl, const char *ifname, char **p_bus_name, char **p_dev_name, uint32_t *p_port_index) @@ -845,14 +862,10 @@ static int ifname_map_lookup(struct dl *dl, const char *ifname, struct ifname_map *ifname_map; int err; - if (!dl->map_loaded) { - err = ifname_map_load(dl); - if (err) { - pr_err("Failed to create index map\n"); - return err; - } - dl->map_loaded = true; - } + err = ifname_map_check_load(dl); + if (err) + return err; + list_for_each_entry(ifname_map, &dl->ifname_map_list, list) { if (strcmp(ifname, ifname_map->ifname) == 0) { *p_bus_name = ifname_map->bus_name; @@ -870,6 +883,12 @@ static int ifname_map_rev_lookup(struct dl *dl, const char *bus_name, { struct ifname_map *ifname_map; + int err; + + err = ifname_map_check_load(dl); + if (err) + return err; + list_for_each_entry(ifname_map, &dl->ifname_map_list, list) { if (strcmp(bus_name, ifname_map->bus_name) == 0 && strcmp(dev_name, ifname_map->dev_name) == 0 && -- 2.37.3
Powered by blists - more mailing lists