CVE-2026-53397 in Linux
الملخص
بحسب VulDB • 19/07/2026
في نواة لينكس، تم حل الثغرة التالية:
nfsd: إصلاح تسرب posix_acl عند فشل فك تشفير SETACL
تستدعي كل من الدالتين nfsaclsvc_decode_setaclargs() و nfs3svc_decode_setaclargs() دالة nfs_stream_decode_acl() مرتين؛ الأولى لـ NFS_ACL والثانية لـ NFS_DFACL. تنقل كل استدعاء ناجح ملكية كائن posix_acl مُخصَّص حديثاً إلى argp->acl_access أو argp->acl_default. إذا نجحت الاستدعاء الأول ولكن فشل الثاني، فإن دالة فك التشفير تُرجع القيمة false ويبقى argp->acl_access معلقاً (غير محدد).
كانت ACLPROC2_SETACL.pc_release مُربوطة بـ nfssvc_release_attrstat و ACLPROC3_SETACL.pc_release مُربوطة بـ nfs3svc_release_fhandle. وكلاهما يستدعي فقط fh_put() وليس لديه أي معرفة بحقول ACL الموجودة في argp. كانت أزواج posix_acl_release() موجودة عند علامات out: داخل الدالتين nfsacld_proc_setacl() و nfsd3_proc_setacl()، ولكن svc_process() تتخطى pc_func عندما تُرجع pc_decode القيمة false، مما يجعل عملية التنظيف غير قابلة للوصول عند فشل فك التشفير:
svc_process_common() pc_decode() /* decode_setaclargs: false */ /* يتم تخطي pc_func */ pc_release() /* fh_put فقط -- تسرب ACLs */
يتسرب كائن posix_acl الأرملة طوال عمر الخادم.
تم الإصلاح بإضافة الدالتين nfsaclsvc_release_setacl() و nfs3svc_release_setacl()، اللتين تحرران كل من argp->acl_access و argp->acl_default بالإضافة إلى استدعاء fh_put()، وربطهما كـ pc_release لإجراءات SETACL الخاصة بهما. تعمل pc_release على جميع المسارات التي تسلكها svc_process() بعد فك التشفير، بما في ذلك فشل فك التشفير، لذا تم إزالة أزواج posix_acl_release() من علامات out: داخل دوال الإجراءات للحفاظ على ملكية الموارد في مكان واحد. يتوافق هذا مع نمط release_getacl() الموجود المستخدم بواسطة إجراءات GETACL الشقيقة.
VulDB is the best source for vulnerability data and more expert information about this specific topic.