A text cursor in the tty; LDLS sets net_device.priv_len
The virtual terminals never drew a cursor. Each now paints a steady block (the cell with its colours swapped), erased before and redrawn after every output byte, redrawn by a repaint, and hidden by ESC [ ? 25 l as curses programs ask. r8169 under LDLS on the TUF A15 got through probe and died in ndo_open on __fortify_panic. netdev_priv() is `dev->priv` now, a flexible array counted by net_device.priv_len, and rtl_open's memset of its ring bookkeeping is bounds-checked against it. The allocator left priv_len zero, so the driver saw an area of no bytes. It is set from BTF when the kernel has the member. __fortify_panic also says which check, how many bytes it had and wanted, and where from. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015f73FesGZGYPkmDvUcj6QX
This commit is contained in:
parent
a9d2e14004
commit
96389ada8f
7 changed files with 86 additions and 5 deletions
|
|
@ -472,6 +472,9 @@ kpi_layout_from_btf(struct btf *b)
|
|||
GET(nd, "dev_addr", kpi_l.nd_dev_addr);
|
||||
GET(nd, "perm_addr", kpi_l.nd_perm_addr);
|
||||
GET(nd, "addr_len", kpi_l.nd_addr_len);
|
||||
// Optional: older kernels do not have it, and 0 is how that is said.
|
||||
if (btf_member_off(b, nd, "priv_len", &off, &size) == 0)
|
||||
kpi_l.nd_priv_len = off;
|
||||
GET(nd, "mc", kpi_l.nd_mc);
|
||||
GET(nd, "uc", kpi_l.nd_uc);
|
||||
GET(nd, "_tx", kpi_l.nd_tx);
|
||||
|
|
|
|||
Loading…
Reference in a new issue