linuxHeaders: revert accidental struct sockaddr_ll
size change
`linux-6.5` introduced regression in it's headers by breaking `udp2raw`. `udp2raw` relied on the fixed size of `struct sockaddr_ll`: https://github.com/NixOS/nixpkgs/pull/252587#issuecomment-1744427473 Let's revert the API change until it's fixed upstream.
This commit is contained in:
parent
2e1db9174f
commit
fad90186f9
2 changed files with 35 additions and 1 deletions
|
@ -119,7 +119,10 @@ in {
|
|||
hash = "sha256-eldLvCCALqdrUsp/rwcmf3IEXoYbGJFcUnKpjCer+IQ=";
|
||||
};
|
||||
patches = [
|
||||
./no-relocs.patch # for building x86 kernel headers on non-ELF platforms
|
||||
./no-relocs.patch # for building x86 kernel headers on non-ELF platforms
|
||||
|
||||
# Fix regression turning `struct sockaddr_ll` flexible size.
|
||||
./revert-af_packet-flex.patch
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
Revert commit https://github.com/torvalds/linux/commit/a0ade8404c3bc2bf2631cb0f20d372eed22d9d96
|
||||
|
||||
The change caused API regression by turning fixed size struct to
|
||||
flexible size struct. It was an unintentional change, broke `udp2raw`:
|
||||
https://github.com/NixOS/nixpkgs/pull/252587#issuecomment-1744427473
|
||||
--- a/include/uapi/linux/if_packet.h
|
||||
+++ b/include/uapi/linux/if_packet.h
|
||||
@@ -18,11 +18,7 @@ struct sockaddr_ll {
|
||||
unsigned short sll_hatype;
|
||||
unsigned char sll_pkttype;
|
||||
unsigned char sll_halen;
|
||||
- union {
|
||||
- unsigned char sll_addr[8];
|
||||
- /* Actual length is in sll_halen. */
|
||||
- __DECLARE_FLEX_ARRAY(unsigned char, sll_addr_flex);
|
||||
- };
|
||||
+ unsigned char sll_addr[8];
|
||||
};
|
||||
|
||||
/* Packet types */
|
||||
--- a/net/packet/af_packet.c
|
||||
+++ b/net/packet/af_packet.c
|
||||
@@ -3607,7 +3607,7 @@ static int packet_getname(struct socket *sock, struct sockaddr *uaddr,
|
||||
if (dev) {
|
||||
sll->sll_hatype = dev->type;
|
||||
sll->sll_halen = dev->addr_len;
|
||||
- memcpy(sll->sll_addr_flex, dev->dev_addr, dev->addr_len);
|
||||
+ memcpy(sll->sll_addr, dev->dev_addr, dev->addr_len);
|
||||
} else {
|
||||
sll->sll_hatype = 0; /* Bad: we have no ARPHRD_UNSPEC */
|
||||
sll->sll_halen = 0;
|
Loading…
Reference in a new issue