lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 15 Jul 2014 17:14:31 -0700 (PDT)
From:	David Miller <davem@...emloft.net>
To:	drheld@...gle.com
Cc:	netdev@...r.kernel.org, eric.dumazet@...il.com, willemb@...gle.com
Subject: Re: [PATCH net-next 1/2] udp: Simplify __udp*_lib_mcast_deliver.

From: David Held <drheld@...gle.com>
Date: Mon, 14 Jul 2014 18:30:38 -0400

>  	spin_lock(&hslot->lock);
> -	sk = sk_nulls_head(&hslot->head);
> -	dif = skb->dev->ifindex;
> -	sk = udp_v4_mcast_next(net, sk, uh->dest, daddr, uh->source, saddr, dif);
> -	while (sk) {
> -		stack[count++] = sk;
> -		sk = udp_v4_mcast_next(net, sk_nulls_next(sk), uh->dest,
> -				       daddr, uh->source, saddr, dif);
> -		if (unlikely(count == ARRAY_SIZE(stack))) {
> -			if (!sk)
> -				break;
> -			flush_stack(stack, count, skb, ~0);
> -			count = 0;
> +	sk_nulls_for_each(sk, node, &hslot->head) {
> +		if (__udp_is_mcast_sock(net, sk,
> +					uh->dest, daddr,
> +					uh->source, saddr,
> +					dif, hnum)) {
> +			stack[count++] = sk;
> +			if (unlikely(count == ARRAY_SIZE(stack))) {
> +				flush_stack(stack, count, skb, ~0);
> +				count = 0;
> +			}
>  		}
>  	}

I think you are changing the logic of the loop in the edge case.

If we have exactly ARRAY_SIZE(stack) sockets to process, the old code
performs the flush_stack() outside of the hslot->lock, but with your
change we'll do it inside the lock.

The tradeoff here is reducing hslot->lock hold times vs. avoiding
taking a hold on all the sockets in the stack[] array.

I just wanted to point this out and make sure you are aware of and
are ok with this.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ