PR_SET_SYSCALL_USER_DISPATCH(2const)

الاسم
PR_SET_SYSCALL_USER_DISPATCH - تعيين آلية توزيع استدعاءات النظام للمستخدم بالنسبة للخيط المستدعي

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <linux/prctl.h>  /* تعريف ثوابت PR_* */
#include <sys/prctl.h>

int prctl(PR_SET_SYSCALL_USER_DISPATCH, long op, ...);

int prctl(PR_SET_SYSCALL_USER_DISPATCH, PR_SYS_DISPATCH_ON,
          unsigned long off, unsigned long size, int8_t *switch);
int prctl(PR_SET_SYSCALL_USER_DISPATCH, PR_SYS_DISPATCH_OFF, 0L, 0L, 0L);

الوصف
ضبط آلية توزيع استدعاءات النظام للمستخدم للخيط المستدعي. تسمح هذه الآلية للتطبيق باعتراض استدعاءات النظام بشكل انتقائي بحيث يمكن معالجتها داخل التطبيق نفسه. يأخذ الاعتراض شكل إشارة SIGSYS موجهة للخيط تُرسل إلى الخيط عند قيامه باستدعاء نظام. إذا تم اعتراضه، لا ينفذ النواة استدعاء النظام.

PR_SYS_DISPATCH_ON
    تفعيل هذه الآلية.

    بمجرد التفعيل، سيتم اعتراض استدعاءات النظام اللاحقة بشكل انتقائي، اعتمادًا على متغير تحكم يوفره مساحة المستخدم. في هذه الحالة، يحدد off و size على التوالي الإزاحة والحجم لمنطقة ذاكرة متصلة واحدة في مساحة عنوان العملية حيث يُسمح دائمًا بتنفيذ استدعاءات النظام، بغض النظر عن متغير التحكم. (عادةً، ستتضمن هذه المنطقة منطقة الذاكرة التي تحتوي على مكتبة C.)

    يشير switch إلى متغير يعمل كمفتاح سريع للسماح/منع تنفيذ استدعاء النظام دون عبء إجراء استدعاء نظام آخر لإعادة ضبط توزيع استدعاءات النظام للمستخدم. يمكن ضبط متغير التحكم هذا إما على SYSCALL_DISPATCH_FILTER_BLOCK لمنع تنفيذ استدعاءات النظام أو على SYSCALL_DISPATCH_FILTER_ALLOW للسماح مؤقتًا بتنفيذها. يتحقق النواة من هذه القيمة عند كل دخول لاستدعاء نظام، وأي قيمة غير متوقعة ستثير إشارة SIGSYS غير قابلة للالتقاط في ذلك الوقت، مما يقتل التطبيق.

    عند اعتراض استدعاء نظام، يرسل النواة إشارة SIGSYS موجهة للخيط إلى الخيط المسبب. سيتم ضبط عدة حقول في بنية siginfo_t (انظر sigaction(2)) المرتبطة بالإشارة:

    •   سيحتوي si_signo على SIGSYS.

    •   سيعرض si_call_addr عنوان تعليمة استدعاء النظام.

    •   سيوضح si_syscall و si_arch استدعاء النظام الذي جرت محاولته.

    •   سيحتوي si_code على SYS_USER_DISPATCH.

    •   سيتم ضبط si_errno على 0.

    سيكون عداد البرنامج كما لو أن استدعاء النظام حدث (أي، لن يشير عداد البرنامج إلى تعليمة استدعاء النظام).

    عندما يعود معالج الإشارة إلى النواة، يكتمل استدعاء النظام فورًا ويعود إلى الخيط المستدعي، دون أن يتم تنفيذه فعليًا. إذا لزم الأمر (أي، عند محاكاة استدعاء النظام في مساحة المستخدم)، يجب على معالج الإشارة ضبط قيمة إرجاع استدعاء النظام إلى قيمة معقولة، عن طريق تعديل سياق السجلات المخزنة في وسيطة ucontext لمعالج الإشارة. انظر sigaction(2) و sigreturn(2) و getcontext(3) لمزيد من المعلومات.

PR_SYS_DISPATCH_OFF
    تم تعطيل توزيع استدعاءات النظام للمستخدم لهذا الخيط.

لا يتم الحفاظ على الإعداد عبر fork(2) أو clone(2) أو execve(2).

قيمة الإرجاع
عند النجاح، يُعاد الرقم 0. وعند حدوث خطأ، يُعاد الرقم -1، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء

EFAULT
    switch هو عنوان غير صالح.

EINVAL
    op هو PR_SYS_DISPATCH_ON ونطاق الذاكرة المحدد خارج مساحة عنوان العملية.

EINVAL
    op غير صالح.

المعايير
لينكس. x86 فقط.

التاريخ
لينكس 5.11 (x86).

انظر أيضًا
prctl(2)

لمزيد من المعلومات، انظر ملف مصدر النواة Documentation/admin-guide/syscall-user-dispatch.rst

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.