]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/session2: fix error handling in *wrap_after()
authorVladimír Čunát <vladimir.cunat@nic.cz>
Thu, 12 Sep 2024 12:54:16 +0000 (14:54 +0200)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Thu, 12 Sep 2024 13:37:21 +0000 (15:37 +0200)
We need to check the "< 0" condition *before*
incrementing or decrementing the returned layer_ix.

Detected by Coverity :-)

daemon/session2.c

index 0d1a69f50e264fddabfc315aadf1a254cae4d9d1..8980ec0dbf474541c55870d2dd2c73f82f17b342 100644 (file)
@@ -1189,11 +1189,11 @@ int session2_unwrap_after(struct session2 *s, enum protolayer_type protocol,
                           const struct comm_info *comm,
                           protolayer_finished_cb cb, void *baton)
 {
-       ssize_t layer_ix = session2_get_protocol(s, protocol) + 1;
+       ssize_t layer_ix = session2_get_protocol(s, protocol);
        if (layer_ix < 0)
                return layer_ix;
        return session2_submit(s, PROTOLAYER_UNWRAP,
-                       layer_ix, payload, comm, cb, baton);
+                       layer_ix + 1, payload, comm, cb, baton);
 }
 
 int session2_wrap(struct session2 *s, struct protolayer_payload payload,
@@ -1210,10 +1210,10 @@ int session2_wrap_after(struct session2 *s, enum protolayer_type protocol,
                         const struct comm_info *comm,
                         protolayer_finished_cb cb, void *baton)
 {
-       ssize_t layer_ix = session2_get_protocol(s, protocol) - 1;
+       ssize_t layer_ix = session2_get_protocol(s, protocol);
        if (layer_ix < 0)
                return layer_ix;
-       return session2_submit(s, PROTOLAYER_WRAP, layer_ix,
+       return session2_submit(s, PROTOLAYER_WRAP, layer_ix - 1,
                        payload, comm, cb, baton);
 }