raspberrypi mdns calls lwip without holding the core lock
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 49/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- c, raspberry-pi
- Lĩnh vực
- networking
Hướng nghiên cứu
Start with ports/raspberrypi/common-hal/mdns/Server.c and compare its lwIP calls with the lock usage in common-hal/socketpool/ and common-hal/wifi/Radio.c; check the lock macros in ports/raspberrypi/mpconfigport.h. Review every call site listed in the issue, paying particular attention to paths that can raise or fail allocation. Done means those calls are protected without leaving the lock held on an error path.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Claude wrote this:
ports/raspberrypi/common-hal/mdns/Server.c calls lwip's mdns API without holding the lwip core lock.
lwip expects it. LWIP_ASSERT_CORE_LOCKED() is the first statement in mdns_resp_add_service(), mdns_resp_del_service(), mdns_resp_add_netif(), mdns_resp_rename_netif(), mdns_resp_remove_netif() and others (ports/raspberrypi/lib/lwip/src/apps/mdns/mdns.c:2398,2460,2502,2546,2585, among more). It compiles to a no-op here because LWIP_CHECK_CORE_LOCKING isn't set in lwipopts.h, which is presumably why this hasn't been noticed.
The port runs lwip from a low-priority IRQ — async_context_threadsafe_background.c and cyw43_arch_threadsafe_background.c are in ports/raspberrypi/Makefile:43,45 — so these calls really can race with lwip's own processing rather than merely violating a convention.
Unlocked call sites in that file:
mdns_server_construct()—mdns_resp_init(),mdns_resp_restart(),mdns_resp_add_secondary_hostname()common_hal_mdns_server_set_hostname()—mdns_resp_netif_active(),mdns_resp_rename_netif(),mdns_resp_add_netif()common_hal_mdns_server_deinit()—mdns_resp_remove_netif()common_hal_mdns_server_advertise_service()—mdns_resp_del_service(),mdns_resp_add_service()mdns_server_find()andcommon_hal_mdns_server_find()—mdns_search_service(),mdns_search_stop()
The port already has the primitive: MICROPY_PY_LWIP_ENTER / MICROPY_PY_LWIP_EXIT map to cyw43_arch_lwip_begin() / cyw43_arch_lwip_end() (ports/raspberrypi/mpconfigport.h:50-52), and common-hal/socketpool/ and common-hal/wifi/Radio.c use them.
Care is needed where a locked region can raise — mp_raise_RuntimeError() on a failed mdns_resp_add_service() slot, and m_malloc_fail() — since a longjmp out of a locked region would leave the lock held.
Claude noticed this while reviewing #11181, which locks the TXT record swap in assign_txt_records() but deliberately leaves the rest of the file alone so this can be looked at on its own.
- Ngôn ngữ chính
- C
- Star
- 4.6k
- Fork
- 1.4k
- Merge trung bình
- 1 ngày 8 giờ
- Pull request đã merge (30 ngày)
- 155
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của adafruit/circuitpython
-
board breaks api
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
adafruit/circuitpython#11099 · 3 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
storage usb zephyr
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
adafruit/circuitpython#11531 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Move silabs to ZephyrĐang mởsilabs
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
adafruit/circuitpython#11507 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Feature/API request: portable camera capture across ESP-IDF, Zephyr, and parallel interfacesCó thể đã có người làm @tannewt đã nhận hôm nay. Đang mởcircuitpython api displayio enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
adafruit/circuitpython#11505 · 5 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 38/100
adafruit/circuitpython#11472 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của adafruit/circuitpython
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Policy query leaks host primary block (BSL_PrimaryBlock_deinit skipped) on two early-exit pathsĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
NASA-AMMOS/BSL#355 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
arancormonk/dsd-neo#660 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug]: remote-ls --updates reports up-to-date OCI refs because it ignores deployed Alt-idCó thể đã có người làm @Joao-kouznetz đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
#242 leftovers: dated narrative and shas in the social-features test planCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
EchoTools/nevr-runtime#264 ·
Maintainer thường phản hồi trong vòng 1 ngày