Re: [PATCH net] af_unix: Guard against other == sk in unix_dgram_sendmsg
From: Rainer Weikusat <hidden>
Date: 2016-02-12 21:00:27
Also in:
lkml
Ben Hutchings [off-list ref] writes:
On Fri, 2016-02-12 at 20:17 +0000, Rainer Weikusat wrote:
[...]
quoted
quoted
quoted
I don't think this should apply when receiving and sending sockets are identical. But that's just my opinion. The other option would be to avoid the unix_state_double_lock for sk == other.Given that unix_state_double_lock() already handles sk == other, I'm not sure why you think it needs to be avoided.Because the whole complication of restarting the operation after locking both sk and other because other had to be unlocked before calling unix_state_double_lock is useless for this case:
[...]
Well of course it's useless, but it's also harmless.
As is adding a for (i = 0; i < 1000000; ++i); between any two statements. And this isn't even entirely true as the pointless double-lock will then require "did we pointlessly doube-lock" checks elsewhere. I think it should be possible to do this in a simpler way by not pointlessly double-locking (this may be wrong but it's worth a try).
If we really wanted to optimise this we could also skip unlocking if other < sk.
I wouldn't want to hardcode assumptions about the unix_state_double_lock algorithm in functions using it.