chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rtnl: make checks for default routes more strict
[elogind.git]
/
src
/
libsystemd
/
sd-rtnl
/
local-addresses.c
diff --git
a/src/libsystemd/sd-rtnl/local-addresses.c
b/src/libsystemd/sd-rtnl/local-addresses.c
index 3ab99420a375aec78823986362849e7a364ca30a..b669f9025ba428d9d5861712872cb8ae071569ad 100644
(file)
--- a/
src/libsystemd/sd-rtnl/local-addresses.c
+++ b/
src/libsystemd/sd-rtnl/local-addresses.c
@@
-197,7
+197,7
@@
int local_gateways(sd_rtnl *context, int ifindex, struct local_address **ret) {
for (m = reply; m; m = sd_rtnl_message_next(m)) {
struct local_address *a;
uint16_t type;
for (m = reply; m; m = sd_rtnl_message_next(m)) {
struct local_address *a;
uint16_t type;
- unsigned char dst_len;
+ unsigned char dst_len
, src_len
;
uint32_t ifi;
r = sd_rtnl_message_get_errno(m);
uint32_t ifi;
r = sd_rtnl_message_get_errno(m);
@@
-211,14
+211,19
@@
int local_gateways(sd_rtnl *context, int ifindex, struct local_address **ret) {
if (type != RTM_NEWROUTE)
continue;
if (type != RTM_NEWROUTE)
continue;
+ /* We only care for default routes */
r = sd_rtnl_message_route_get_dst_len(m, &dst_len);
if (r < 0)
return r;
r = sd_rtnl_message_route_get_dst_len(m, &dst_len);
if (r < 0)
return r;
-
- /* We only care for default routes */
if (dst_len != 0)
continue;
if (dst_len != 0)
continue;
+ r = sd_rtnl_message_route_get_src_len(m, &src_len);
+ if (r < 0)
+ return r;
+ if (src_len != 0)
+ continue;
+
r = sd_rtnl_message_read_u32(m, RTA_OIF, &ifi);
if (r < 0)
return r;
r = sd_rtnl_message_read_u32(m, RTA_OIF, &ifi);
if (r < 0)
return r;