If pfkeyv2_send() tries to send a message without a required extension
or with a non-allowed extension it will silently fail.  I spent many
hours debugging the code exporting counters because of this.  I'd like
to return an error code instead.

Ok?

Index: /sys/net/pfkeyv2.c
===================================================================
RCS file: /cvs/src/sys/net/pfkeyv2.c,v
retrieving revision 1.194
diff -u -p -r1.194 pfkeyv2.c
--- /sys/net/pfkeyv2.c  13 Jan 2019 14:31:55 -0000      1.194
+++ /sys/net/pfkeyv2.c  26 Jan 2019 19:48:28 -0000
@@ -2041,12 +2041,16 @@ ret:
                                seen |= (1LL << i);
 
                if ((seen & sadb_exts_allowed_out[smsg->sadb_msg_type])
-                   != seen)
+                   != seen) {
+                       rval = EPERM;
                        goto realret;
+               }
 
                if ((seen & sadb_exts_required_out[smsg->sadb_msg_type]) !=
-                   sadb_exts_required_out[smsg->sadb_msg_type])
+                   sadb_exts_required_out[smsg->sadb_msg_type]) {
+                       rval = EPERM;
                        goto realret;
+               }
        }
 
        rval = pfkeyv2_sendmessage(headers, mode, so, 0, 0, rdomain);

Reply via email to