Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bee955cd authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'bpf-Fix-bugs-in-sock_ops-samples'



Lawrence Brakmo says:

====================
bpf: Fix bugs in sock_ops samples

The programs were returning -1 in some cases when they should
only return 0 or 1. Changes in the verifier now catch this
issue and the programs fail to load. This is now fixed.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 8d6e79d3 03e982ee
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -41,8 +41,10 @@ int bpf_bufs(struct bpf_sock_ops *skops)
	 * if neither port numberis 55601
	 */
	if (bpf_ntohl(skops->remote_port) != 55601 &&
	    skops->local_port != 55601)
		return -1;
	    skops->local_port != 55601) {
		skops->reply = -1;
		return 1;
	}

	op = (int) skops->op;

@@ -61,7 +63,7 @@ int bpf_bufs(struct bpf_sock_ops *skops)
		/* Set sndbuf and rcvbuf of active connections */
		rv = bpf_setsockopt(skops, SOL_SOCKET, SO_SNDBUF, &bufsize,
				    sizeof(bufsize));
		rv = rv*100 + bpf_setsockopt(skops, SOL_SOCKET, SO_RCVBUF,
		rv += bpf_setsockopt(skops, SOL_SOCKET, SO_RCVBUF,
				     &bufsize, sizeof(bufsize));
		break;
	case BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB:
@@ -71,7 +73,7 @@ int bpf_bufs(struct bpf_sock_ops *skops)
		/* Set sndbuf and rcvbuf of passive connections */
		rv = bpf_setsockopt(skops, SOL_SOCKET, SO_SNDBUF, &bufsize,
				    sizeof(bufsize));
		rv = rv*100 + bpf_setsockopt(skops, SOL_SOCKET, SO_RCVBUF,
		rv += bpf_setsockopt(skops, SOL_SOCKET, SO_RCVBUF,
				     &bufsize, sizeof(bufsize));
		break;
	default:
+13 −11
Original line number Diff line number Diff line
@@ -41,8 +41,10 @@ int bpf_clamp(struct bpf_sock_ops *skops)
	/* For testing purposes, only execute rest of BPF program
	 * if neither port numberis 55601
	 */
	if (bpf_ntohl(skops->remote_port) != 55601 && skops->local_port != 55601)
		return -1;
	if (bpf_ntohl(skops->remote_port) != 55601 && skops->local_port != 55601) {
		skops->reply = -1;
		return 0;
	}

	op = (int) skops->op;

@@ -66,7 +68,7 @@ int bpf_clamp(struct bpf_sock_ops *skops)
			/* Set sndbuf and rcvbuf of active connections */
			rv = bpf_setsockopt(skops, SOL_SOCKET, SO_SNDBUF,
					    &bufsize, sizeof(bufsize));
			rv = rv*100 + bpf_setsockopt(skops, SOL_SOCKET,
			rv += bpf_setsockopt(skops, SOL_SOCKET,
					     SO_RCVBUF, &bufsize,
					     sizeof(bufsize));
			break;
@@ -80,10 +82,10 @@ int bpf_clamp(struct bpf_sock_ops *skops)
			rv = bpf_setsockopt(skops, SOL_TCP,
					    TCP_BPF_SNDCWND_CLAMP,
					    &clamp, sizeof(clamp));
			rv = rv*100 + bpf_setsockopt(skops, SOL_SOCKET,
			rv += bpf_setsockopt(skops, SOL_SOCKET,
					     SO_SNDBUF, &bufsize,
					     sizeof(bufsize));
			rv = rv*100 + bpf_setsockopt(skops, SOL_SOCKET,
			rv += bpf_setsockopt(skops, SOL_SOCKET,
					     SO_RCVBUF, &bufsize,
					     sizeof(bufsize));
			break;
+4 −2
Original line number Diff line number Diff line
@@ -39,8 +39,10 @@ int bpf_cong(struct bpf_sock_ops *skops)
	 * if neither port numberis 55601
	 */
	if (bpf_ntohl(skops->remote_port) != 55601 &&
	    skops->local_port != 55601)
		return -1;
	    skops->local_port != 55601) {
		skops->reply = -1;
		return 1;
	}

	op = (int) skops->op;

+8 −6
Original line number Diff line number Diff line
@@ -42,8 +42,10 @@ int bpf_iw(struct bpf_sock_ops *skops)
	 * if neither port numberis 55601
	 */
	if (bpf_ntohl(skops->remote_port) != 55601 &&
	    skops->local_port != 55601)
		return -1;
	    skops->local_port != 55601) {
		skops->reply = -1;
		return 1;
	}

	op = (int) skops->op;

@@ -62,7 +64,7 @@ int bpf_iw(struct bpf_sock_ops *skops)
		/* Set sndbuf and rcvbuf of active connections */
		rv = bpf_setsockopt(skops, SOL_SOCKET, SO_SNDBUF, &bufsize,
				    sizeof(bufsize));
		rv = rv*100 + bpf_setsockopt(skops, SOL_SOCKET, SO_RCVBUF,
		rv += bpf_setsockopt(skops, SOL_SOCKET, SO_RCVBUF,
				     &bufsize, sizeof(bufsize));
		break;
	case BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB:
@@ -73,7 +75,7 @@ int bpf_iw(struct bpf_sock_ops *skops)
		/* Set sndbuf and rcvbuf of passive connections */
		rv = bpf_setsockopt(skops, SOL_SOCKET, SO_SNDBUF, &bufsize,
				    sizeof(bufsize));
		rv = rv*100 + bpf_setsockopt(skops, SOL_SOCKET, SO_RCVBUF,
		rv +=  bpf_setsockopt(skops, SOL_SOCKET, SO_RCVBUF,
				      &bufsize, sizeof(bufsize));
		break;
	default:
+4 −2
Original line number Diff line number Diff line
@@ -38,8 +38,10 @@ int bpf_rwnd(struct bpf_sock_ops *skops)
	 * if neither port numberis 55601
	 */
	if (bpf_ntohl(skops->remote_port) !=
	    55601 && skops->local_port != 55601)
		return -1;
	    55601 && skops->local_port != 55601) {
		skops->reply = -1;
		return 1;
	}

	op = (int) skops->op;

Loading