I debug the rocky 8.7 kernel. (4.18.0-425.3.1.el8.x86_64 and 4.18.0-425.13.1.el8.x86_64) for our company module issue.
And I have a question . why pv_mmu_ops notify_page_enc_status_changed field is moved to reserved1 field on (4.18.0-425.13.1.el8.x86_64)? I think pv_mmu_ops structure reserved filed may exist for compatibility. By moving field to reserved, size reduced. (I think notify_page_enc_status_changed location dummy field needed or must not change the location)
Is there any reson I don't know ?
4.18.0-425.3.1.el8.x86_64 crash> struct pv_mmu_ops struct pv_mmu_ops { unsigned long (*read_cr2)(void); void (*notify_page_enc_status_changed)(unsigned long, int, bool); void (*write_cr2)(unsigned long); unsigned long (*read_cr3)(void); void (*write_cr3)(unsigned long); void (*activate_mm)(struct mm_struct *, struct mm_struct *); void (*dup_mmap)(struct mm_struct *, struct mm_struct *); void (*exit_mmap)(struct mm_struct *); void (*flush_tlb_user)(void); void (*flush_tlb_kernel)(void); void (*flush_tlb_one_user)(unsigned long); void (*flush_tlb_others)(const struct cpumask *, const struct flush_tlb_info *); void (*tlb_remove_table)(struct mmu_gather *, void *); int (*pgd_alloc)(struct mm_struct *); void (*pgd_free)(struct mm_struct *, pgd_t *); void (*alloc_pte)(struct mm_struct *, unsigned long); void (*alloc_pmd)(struct mm_struct *, unsigned long); void (*alloc_pud)(struct mm_struct *, unsigned long); void (*alloc_p4d)(struct mm_struct *, unsigned long); void (*release_pte)(unsigned long); void (*release_pmd)(unsigned long); void (*release_pud)(unsigned long); void (*release_p4d)(unsigned long); void (*set_pte)(pte_t *, pte_t); void (*set_pte_at)(struct mm_struct *, unsigned long, pte_t *, pte_t); void (*set_pmd)(pmd_t *, pmd_t); pte_t (*ptep_modify_prot_start)(struct vm_area_struct *, unsigned long, pte_t *); void (*ptep_modify_prot_commit)(struct vm_area_struct *, unsigned long, pte_t *, pte_t); struct paravirt_callee_save pte_val; struct paravirt_callee_save make_pte; struct paravirt_callee_save pgd_val; struct paravirt_callee_save make_pgd; void (*set_pud)(pud_t *, pud_t); struct paravirt_callee_save pmd_val; struct paravirt_callee_save make_pmd; struct paravirt_callee_save pud_val; struct paravirt_callee_save make_pud; void (*set_p4d)(p4d_t *, p4d_t); struct paravirt_callee_save p4d_val; struct paravirt_callee_save make_p4d; void (*set_pgd)(pgd_t *, pgd_t); struct pv_lazy_ops lazy_mode; void (*set_fixmap)(unsigned int, phys_addr_t, pgprot_t); unsigned long rh_reserved1; unsigned long rh_reserved2; unsigned long rh_reserved3; unsigned long rh_reserved4; } SIZE: 392
4.18.0-425.13.1.el8.x86_64 crash> struct pv_mmu_ops struct pv_mmu_ops { unsigned long (*read_cr2)(void); void (*write_cr2)(unsigned long); unsigned long (*read_cr3)(void); void (*write_cr3)(unsigned long); void (*activate_mm)(struct mm_struct *, struct mm_struct *); void (*dup_mmap)(struct mm_struct *, struct mm_struct *); void (*exit_mmap)(struct mm_struct *); void (*flush_tlb_user)(void); void (*flush_tlb_kernel)(void); void (*flush_tlb_one_user)(unsigned long); void (*flush_tlb_others)(const struct cpumask *, const struct flush_tlb_info *); void (*tlb_remove_table)(struct mmu_gather *, void *); int (*pgd_alloc)(struct mm_struct *); void (*pgd_free)(struct mm_struct *, pgd_t *); void (*alloc_pte)(struct mm_struct *, unsigned long); void (*alloc_pmd)(struct mm_struct *, unsigned long); void (*alloc_pud)(struct mm_struct *, unsigned long); void (*alloc_p4d)(struct mm_struct *, unsigned long); void (*release_pte)(unsigned long); void (*release_pmd)(unsigned long); void (*release_pud)(unsigned long); void (*release_p4d)(unsigned long); void (*set_pte)(pte_t *, pte_t); void (*set_pte_at)(struct mm_struct *, unsigned long, pte_t *, pte_t); void (*set_pmd)(pmd_t *, pmd_t); pte_t (*ptep_modify_prot_start)(struct vm_area_struct *, unsigned long, pte_t *); void (*ptep_modify_prot_commit)(struct vm_area_struct *, unsigned long, pte_t *, pte_t); struct paravirt_callee_save pte_val; struct paravirt_callee_save make_pte; struct paravirt_callee_save pgd_val; struct paravirt_callee_save make_pgd; void (*set_pud)(pud_t *, pud_t); struct paravirt_callee_save pmd_val; struct paravirt_callee_save make_pmd; struct paravirt_callee_save pud_val; struct paravirt_callee_save make_pud; void (*set_p4d)(p4d_t *, p4d_t); struct paravirt_callee_save p4d_val; struct paravirt_callee_save make_p4d; void (*set_pgd)(pgd_t *, pgd_t); struct pv_lazy_ops lazy_mode; void (*set_fixmap)(unsigned int, phys_addr_t, pgprot_t); union { void (*notify_page_enc_status_changed)(unsigned long, int, bool); struct { unsigned long rh_reserved1; } rh_kabi_hidden_308; union { <no data fields> }; }; unsigned long rh_reserved2; unsigned long rh_reserved3; unsigned long rh_reserved4; } SIZE: 384 4.18.0-425.13.1.el8.x86_64
Thanks
"안전해서 더욱 자유로운 세상 – 안랩"
youngjun park / Base Technology team / Endpoint research laboratory
T 031-722-8369 F 031-722-8277
youngjun.park@ahnlab.com www.ahnlab.comhttp://www.ahnlab.com/
(13493) 경기도 성남시 분당구 판교역로 220 (주)안랩
본 메일은 지정된 수취인만을 위해 작성되었으며, 중요한 정보나 저작권을 포함하고 있을 수 있습니다. 어떠한 권한 없이, 본 문서에 포함된 정보의 전부 또는 일부를 무단으로 제3자에게 공개, 배포, 복사 또는 사용하는 것을 엄격히 금지합니다. 만약, 본 메일이 잘못 전송된 경우, 발신인 또는 당사에 알려주시고, 본 메일을 즉시 삭제하여 주시기 바랍니다.