How to audit socket close system call?

Alexander Viro aviro at redhat.com
Thu Jan 8 22:55:58 UTC 2015


On Fri, Dec 19, 2014 at 02:06:52PM +0800, Jie Cui wrote:
> Hi all~
> How to audit socket close system call?
> I can audit the socket connection by 'connect' system call.
> I can also audit the socket termination by 'shutdown' system call.
> But I can't figure out how to audit when the socket is closed.
> Does the 'close' system call works? However all the file close events will
> also be auditing. That's not what I want.

_Which_ system call?  It may be close().  It may be dup2().  It may be
execve().  It may be exit().  It may be anything that kills a process
(signal delivery from somebody else, segfault, etc.).  It may be anything
that triggers AF_UNIX garbage collection.

And conversely, any of those might very well be _not_ the final close;
e.g. dup() + close() will leave the socket open - under a new file
descriptor number.  fork() + close() will do the same.  So will sticking
that descriptor into SCM_RIGHTS datagram and passing it over AF_UNIX
socket, to be received by somebody at later time - you can do close()
after having sent that and it won't do a damn thing to the reference that
went into the datagram.

Incidentally, that's a fine example of the reasons why syscall audit is useless
for almost anything other than CYA.  It's not that syscall tracing is useless -
strace can be quite useful, actually.  It's the bogus impression of coverage
in case of watching what live system does - a whole lot of events simply do
not map on "somebody had done a syscall with such and such arguments".




More information about the Linux-audit mailing list