static int bpf_exec_tx_verdict(struct sk_msg *msg, struct sock *sk,
                               bool full_record, u8 record_type,
-                              size_t *copied, int flags)
+                              ssize_t *copied, int flags)
 {
        struct tls_context *tls_ctx = tls_get_ctx(sk);
        struct tls_sw_context_tx *ctx = tls_sw_ctx_tx(tls_ctx);
        unsigned char record_type = TLS_RECORD_TYPE_DATA;
        bool is_kvec = iov_iter_is_kvec(&msg->msg_iter);
        bool eor = !(msg->msg_flags & MSG_MORE);
-       size_t try_to_copy, copied = 0;
+       size_t try_to_copy;
+       ssize_t copied = 0;
        struct sk_msg *msg_pl, *msg_en;
        struct tls_rec *rec;
        int required_size;
 
        release_sock(sk);
        mutex_unlock(&tls_ctx->tx_lock);
-       return copied ? copied : ret;
+       return copied > 0 ? copied : ret;
 }
 
 static int tls_sw_do_sendpage(struct sock *sk, struct page *page,
        struct sk_msg *msg_pl;
        struct tls_rec *rec;
        int num_async = 0;
-       size_t copied = 0;
+       ssize_t copied = 0;
        bool full_record;
        int record_room;
        int ret = 0;
        }
 sendpage_end:
        ret = sk_stream_error(sk, flags, ret);
-       return copied ? copied : ret;
+       return copied > 0 ? copied : ret;
 }
 
 int tls_sw_sendpage_locked(struct sock *sk, struct page *page,