Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

psys: r78 writes to struct ipu7_bus_device fields absent from the in-kernel intel_ipu7 (ABI break for DKMS builds)

Aperta
#93 1 commento 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
42/100
Tipo di issue
Bug
Chiarezza
Da chiarire
Stato di attività
Tranquilla
Stack tecnologico
c

Direzione di ricerca

Inizia leggendo drivers/media/pci/intel/ipu7/ipu7-bus.h, ipu7_psys_probe() e ipu_psys_task_request(), quindi confronta il layout della struct utilizzato da intel_ipu7 con quello del modulo psys DKMS. Riproduci il dispositivo /dev/ipu7-psys0 mancante sulle versioni del kernel indicate. Il lavoro è completato quando i moduli gestiscono in modo sicuro una incompatibilità dell’interfaccia e psys esegue correttamente il probe oppure segnala un errore chiaro.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Since the 2026-06-29 drop (0e8c71a, released as r76/r78), the out-of-tree psys driver is ABI-incompatible with an in-kernel intel_ipu7, and the failure is silent: /dev/ipu7-psys0 never appears and the RGB camera is gone.

The change

0e8c71a appends two fields to struct ipu7_bus_device in drivers/media/pci/intel/ipu7/ipu7-bus.h:

struct mutex acquire_fw_task_buffer_lock;
unsigned int (*get_running_fw_task_count)(struct ipu7_bus_device *adev);

ipu7_psys_probe() writes to the second:

adev->get_running_fw_task_count = ipu7_psys_get_running_fw_task_count;

and ipu_psys_task_request() takes the new mutex.

Why that breaks

struct ipu7_bus_device is allocated by intel_ipu7. On any distro shipping the staging intel_ipu7 with the kernel while psys comes from DKMS, the two disagree about the struct:

intel_ipu7       kernel/drivers/staging/media/ipu7/intel-ipu7.ko.zst
intel_ipu7_psys  updates/dkms/intel-ipu7-psys.ko.zst

The kernel allocated the shorter struct; the DKMS psys was compiled against the longer one. So the probe-time assignment writes past the end of the allocation, and the mutex lock operates on memory that is not a mutex.

Verified against the running kernel module: intel-ipu7.ko contains ipu7_bus_ready_to_probe — a field of the same struct — and zero occurrences of either new field.

Reproduced

Two machines, independently:

  • Dell XPS 16 DA16260, Panther Lake, CachyOS 7.2.0-rc4 — pinned at r74 (24d8923), works. r76 previously produced a runtime psys_ioctl GPF here.
  • Dell (reporter), CachyOS 7.1.4 — r78, /dev/ipu7-psys0 MISSING after a clean rebuild and reboot, intel_ipu7_psys loaded, no RGB camera. Details in #26.

This affects every Arch/CachyOS user on a recent kernel, since the staging intel_ipu7 landed in-tree while psys did not.

Related, same root cause

ipu7_psys_probe() also begins:

if (!adev->isp->ipu7_bus_ready_to_probe)
        return -EPROBE_DEFER;

That is a read of a field on the same kernel-owned struct, and it fails the same way when the layouts disagree — psys defers forever while isys binds normally, because isys ships alongside intel_ipu7. That asymmetry makes the failure look selective and sends people debugging the wrong component entirely.

Suggestions

The out-of-tree psys reaching into a struct owned by a module it does not build alongside is fragile by construction. Options that would help:

  1. Version the interface. A version field or a size check on struct ipu7_bus_device, so a mismatched psys refuses to probe with a clear message instead of corrupting memory.
  2. Keep new state in psys. get_running_fw_task_count and the FW-task mutex are psys concerns; storing them on the shared bus device is what creates the coupling.
  3. Document the constraint. If the vendor tree is only supported when intel_ipu7 is also built from it, saying so in the README would save people a lot of time — the current failure gives no hint.

Happy to test patches; I have the hardware and a reproducer on two machines.

Lingua principale
C
Stelle
14
Fork
39
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di intel/ipu7-drivers

Tutte le issue di intel/ipu7-drivers

Issue simili

Altre issue su C

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.