neels has uploaded this change for review.

View Change

fix some cases of rc == 0 on error

When genl_socket_talk() fails, return rc != 0.

While testing the new osmo-upf program, I noticed that I failed to get a
"Operation not permitted" error when forgetting to set cap_net_admin on
the osmo-upf binary. It looked like everything should work, but doesn't.

It is possible to catch these error cases without this patch, by
monitoring errno. That may well be the intention of the API? I'm still
submitting this patch because it seems better to return rc != 0.

Returning -2 is an arbitrary choice. Other places return -1, so -2 makes
these cases distinguishable. Not really necessary.

Here is a code example that also catches all error cases without this
patch:

errno = 0;
rc = gtp_add_tunnel(genl_id, nl, t);
if (errno) {
rc = -errno;
} else if (rc) {
rc = -EINVAL;
} else {
tun->active = true;
}
return rc;

Related: SYS#5599
Change-Id: I22fd69709e023572c6c616a4184340a554456faf
---
M src/gtp-genl.c
1 file changed, 7 insertions(+), 3 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/libgtpnl refs/changes/90/26990/1
diff --git a/src/gtp-genl.c b/src/gtp-genl.c
index f12f872..88c0f80 100644
--- a/src/gtp-genl.c
+++ b/src/gtp-genl.c
@@ -77,8 +77,10 @@
GTP_CMD_NEWPDP);
gtp_build_payload(nlh, t);

- if (genl_socket_talk(nl, nlh, seq, NULL, NULL) < 0)
+ if (genl_socket_talk(nl, nlh, seq, NULL, NULL) < 0) {
perror("genl_socket_talk");
+ return -2;
+ }

return 0;
}
@@ -94,8 +96,10 @@
GTP_CMD_DELPDP);
gtp_build_payload(nlh, t);

- if (genl_socket_talk(nl, nlh, seq, NULL, NULL) < 0)
+ if (genl_socket_talk(nl, nlh, seq, NULL, NULL) < 0) {
perror("genl_socket_talk");
+ return -2;
+ }

return 0;
}
@@ -200,7 +204,7 @@

if (genl_socket_talk(nl, nlh, seq, genl_gtp_attr_cb, NULL) < 0) {
perror("genl_socket_talk");
- return 0;
+ return -2;
}

return 0;

To view, visit change 26990. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: libgtpnl
Gerrit-Branch: master
Gerrit-Change-Id: I22fd69709e023572c6c616a4184340a554456faf
Gerrit-Change-Number: 26990
Gerrit-PatchSet: 1
Gerrit-Owner: neels <nhofmeyr@sysmocom.de>
Gerrit-MessageType: newchange