In the Linux kernel, the following vulnerability has been resolved:
net/nfc: fix use-after-free llcpsockbind/connect
Commits 8a4cd82d ("nfc: fix refcount leak in llcpsockconnect()") and c33b1cc62 ("nfc: fix refcount leak in llcpsockbind()") fixed a refcount leak bug in bind/connect but introduced a use-after-free if the same local is assigned to 2 different sockets.
This can be triggered by the following simple program: int sock1 = socket( AFNFC, SOCKSTREAM, NFCSOCKPROTOLLCP ); int sock2 = socket( AFNFC, SOCKSTREAM, NFCSOCKPROTOLLCP ); memset( &addr, 0, sizeof(struct sockaddrnfcllcp) ); addr.safamily = AFNFC; addr.nfcprotocol = NFCPROTONFCDEP; bind( sock1, (struct sockaddr) &addr, sizeof(struct sockaddr_nfc_llcp) ) bind( sock2, (struct sockaddr) &addr, sizeof(struct sockaddrnfcllcp) ) close(sock1); close(sock2);
Fix this by assigning NULL to llcpsock->local after calling nfcllcplocalput.
This addresses CVE-2021-23134.