Zephyr RTOS: ZMS free space 테스트 코드 리뷰 및 개선

PR #104644 리뷰 과정에서 발견한 코드 품질 문제들과 수정 내용. 1. sizeof(struct zms_ate) → fixture->fs.ate_size 문제: Flash의 write_block_size에 따라 ZMS는 ATE를 ROUND_UP(sizeof(struct zms_ate), write_block_size) 크기로 배치한다. 테스트가 컴파일 타임 sizeof를 직접 사용하면 write_block_size > sizeof(struct zms_ate) 인 환경에서 free space 계산이 어긋난다. /* before */ const size_t max_space_in_sector = fixture->fs.sector_size - sizeof(struct zms_ate) * 5; /* after */ ate_size = fixture->fs.ate_size; /* runtime: ROUND_UP(sizeof(zms_ate), wbs) */ max_space_in_sector = fixture->fs.sector_size - ate_size * ZMS_MIN_ATE_NUM; 2. Magic number 5 → ZMS_MIN_ATE_NUM 문제: 섹터에 예약되는 ATE 슬롯 수가 5로 하드코딩되어 있었음. zms_priv.h에 이미 ZMS_MIN_ATE_NUM = 5 (close / empty / gc_done / delete / data)가 정의되어 있음. ...

Zephyr RTOS: cbvprintf_package %.*s 포맷 사용 시 OOB 읽기 버그 분석

문제 요약 cbvprintf_package()에서 %.*s 포맷 사용 시 precision specifier를 무시하고 strlen()을 호출. null-terminated가 아닌 문자열에서 힙 버퍼 오버플로(out-of-bounds read) 발생. 원본 이슈: zephyrproject-rtos/zephyr#93999 원인 분석 lib/os/cbprintf_packaged.c의 포맷 문자열 파싱에서 '.'과 '*'를 별도로 처리하지만, '*'로 소비한 precision 정수 값을 저장하지 않음. 이후 's' 처리 시 precision 정보 없이 strlen(s)를 호출하여 할당된 버퍼를 넘어서 읽음. 영향받는 코드: Sizing pass (L676): len += strlen(s) + 1 + 1; Copy pass (L792): size = strlen(s) + 1; 재현 macOS + Apple Clang + AddressSanitizer로 핵심 동작을 독립 재현: ...

Zephyr RTOS: ZMS free space 테스트 assertion 실패 수정

문제 요약 ZMS(Zephyr Memory Storage)의 test_zms_free_space 테스트가 write_block_size > 1인 환경(섹터 크기 4KB 이상)에서 assertion 실패. 테스트가 sizeof(struct zms_ate)를 하드코딩하여 free space를 계산하지만, ZMS 내부는 write_block_size의 배수로 올림한 ate_size를 사용하기 때문에 값이 불일치. 원본 이슈: zephyrproject-rtos/zephyr#101880 원인 분석 zms_mount() 시 ATE 크기는 zms_al_size(fs, sizeof(struct zms_ate))로 결정되어 write_block_size의 배수로 올림됨. 테스트 코드는 이를 무시하고 컴파일 타임 sizeof(struct zms_ate)를 사용하여: free space 산술 계산이 실제 ZMS 동작과 불일치 zassert_equal(ZMS_DATA_IN_ATE_SIZE, ...) — 정렬 패딩으로 인해 정확히 8바이트로 떨어지지 않음 VLA 버퍼가 큰 섹터 크기에서 스택 오버플로 유발 ZMS 구현 자체는 정상. 테스트 로직 버그. ...

Zephyr RTOS: README 누락 샘플 문서화 기여

문제 요약 Zephyr RTOS의 samples/ 디렉토리 내 다수의 샘플이 README 문서 없이 배포되고 있는 문제. 사용자가 샘플의 목적, 요구사항, 빌드 방법을 파악하기 어려움. 원본 이슈: zephyrproject-rtos/zephyr#27805 작업 내용 5개 샘플에 대해 소스 코드(main.c), 설정(prj.conf, sample.yaml), 보드 overlay를 분석하여 Zephyr 표준 포맷(:orphan:, zephyr-app-commands directive)에 맞춘 README.rst를 작성함. 샘플 내용 espressif/ethernet ESP32 Ethernet Kit DHCP/DNS/NET_SHELL mec172xevb/qmspi_ldma QMSPI SPI 플래시 읽기/쓰기/검증 (Dual/Quad) mec172xevb/rom_api ROM API 기반 SHA-224/256/384/512 해시 검증 nordic/nrf_sys_event nRF 상수 지연 모드 및 RRAMC 웨이크업 ipm_mcux/remote NXP LPC 메일박스 IPM 리모트 코어 에코 활동 로그 2026-02-24: 5개 샘플 README.rst 작성 및 PR #104439 제출. 2026-02-24: 메인테이너 @kartben 리뷰 피드백 수신: 표준 템플릿(doc/templates/sample.tmpl) 미준수 → 형식 재작성 필요. 5개 샘플을 개별 PR로 분리 제출할 것 (각 플랫폼 메인테이너 리뷰 필요). 보드 문서 링크 추가 필요. 2026-02-25: 피드백 반영하여 samples/subsys/pm/device_pm README.rst를 표준 템플릿 기반으로 재작성, qemu_x86에서 빌드/실행 검증 후 PR #104503 제출. 빌드 시 발생하는 Sphinx 경고(Doxygen group name 등) 수정 커밋 추가. 2026-02-26: 리뷰어 @JordanYates 리뷰 피드백 반영: 샘플 코드 내의 잘못된 API 사용(pm_device_runtime_enable 대신 pm_device_driver_init 사용)을 수정하여 불필요한 초기 suspend 로그 출력 제거. 수정된 샘플 코드 동작 결과를 반영하여 README.rst의 Expected Output 항목 업데이트. 2026-02-27: 추가 리뷰 피드백 반영 및 CI 실패 수정: prj.conf에 CONFIG_PM_DEVICE_RUNTIME_DEFAULT_ENABLE=y 추가 — 이 설정 없이는 런타임 PM이 실제로 활성화되지 않는 문제 해결. CI twister 테스트 실패 원인 분석: sample.yaml harness regex가 이전 출력 패턴(pre-main suspending 메시지)을 기대하여 120초 타임아웃 발생. sample.yaml harness regex 패턴을 새 출력에 맞게 수정하여 CI 테스트 통과 가능하도록 반영. 2026-02-28: PR CI Compliance 검사 실패(커밋 메시지 너비 75자 초과) 확인 및 커밋 메시지를 72자로 줄바꿈(wrap)하여 강제 푸시 완료. 2026-03-02: 메인테이너 @kartben의 추가 피드백을 반영하여 수정 커밋 푸시. SonarCloud Quality Gate 검사 통과 확인. 2026-03-04: PR got merged. Done.

Zephyr RTOS: CODE_UNREACHABLE 매크로의 Coverity Dead Code 오탐 분석

문제 요약 Zephyr RTOS의 CODE_UNREACHABLE 매크로(__builtin_unreachable())가 Coverity 정적 분석에서 dead code로 오탐되는 문제. 매크로가 ~170곳에서 사용되어 개별 수정은 비현실적이며, 매크로 내부에 주석(/* coverity[deadcode] */)을 삽입하는 제안도 C 전처리기(Phase 3)에서 주석이 소실되어 작동하지 않음을 확인. 원본 이슈: zephyrproject-rtos/zephyr#99981 분석 결과 Coverity 유저 모델을 통해 __builtin_unreachable()를 kill path(__coverity_panic__())로 정의하면, 소스 코드 수정 없이 전역적으로 오탐을 제거할 수 있음. 활동 로그 2026-02-24: 분석 결과를 기반으로 Coverity 유저 모델 제안 코멘트 작성.