Skip to contentSkip to conversation

kcm: Splice support

DISCUSSION Dan Carpenter 1 participant 1 message Mar 15, 2016 Kernel janitors

lore
Share & tools
lore
#0 lore raw

[ Someone probably already fixed this, but I'm not on netdev. -dan ]

Hello Tom Herbert,

The patch 91687355b927: "kcm: Splice support" from Mar 7, 2016, leads to the following static checker warning:

	net/kcm/kcmsock.c:1508 kcm_splice_read()
	warn: unsigned 'copied' is never less than zero.

net/kcm/kcmsock.c
1477 static ssize_t kcm_splice_read(struct socket *sock, loff_t *ppos,
1478 struct pipe_inode_info *pipe, size_t len,
1479 unsigned int flags)
1480 {

  1481          struct sock *sk = sock->sk;
  1482          struct kcm_sock *kcm = kcm_sk(sk);
  1483          long timeo;
  1484          struct kcm_rx_msg *rxm;
  1485          int err = 0;
  1486          size_t copied;
                ^^^^^^^^^^^^^

1487 struct sk_buff *skb;
1488
1489 /* Only support splice for SOCKSEQPACKET */
1490
1491 timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
1492
1493 lock_sock(sk);
1494
1495 skb = kcm_wait_data(sk, flags, timeo, &err);
1496 if (!skb)
1497 goto err_out;
1498
1499 /* Okay, have a message on the receive queue */
1500
1501 rxm = kcm_rx_msg(skb);
1502
1503 if (len > rxm->full_len)
1504 len = rxm->full_len;
1505
1506 copied = skb_splice_bits(skb, sk, rxm->offset, pipe, len, flags,
1507 kcm_sock_splice);

  1508          if (copied < 0) {
                    ^^^^^^^^^

Never true.

I feel like skb_splice_bits() should return ssize_t instead of int just so that everything is consistent.

  1509                  err = copied;
  1510                  goto err_out;
  1511          }

regards,
dan carpenter