פתרון לכידת קלט¶
נבחר כותרת של שלושה שדות uint32_t: size, version ו־length. נדרוש שהאורך הכולל לפחות בגודל הכותרת, שה־version נתמך ושה־length קטן או שווה ל־captured_size פחות גודל הכותרת. החיסור מתבצע רק אחרי בדיקת המינימום, ולכן לא נוצר underflow שמאפשר עקיפת גבול.
הדרייבר יעתיק את הטווח לפי אורך הבקשה החיצוני שנבדק, ואז יפרש את הכותרת מתוך copy. אם thread המשתמש שינה את התוכן בזמן ההעתקה, ייתכן שהעותק אינו מתאר בקשה חוקית; ה־validation ידחה אותו. מה שאסור הוא לבדוק length קטן בעותק ואז לקרוא length חדש מן UserBuffer לצורך עיבוד.
ב־direct I/O נשתמש ב־MDL שמופיע בבקשה לפי חוזה המערכת ונימנע מ־unlock/free כפול. במקרה של MDL עצמאי, כל הצלחת probe-and-lock יוצרת חובת unlock, וכל הקצאת MDL יוצרת חובת free, עם cleanup שמבדיל אם נעילת הדפים אכן הצליחה. כשל mapping אינו מבטל את החובות שכבר נוצרו.
נעילת דפים אינה מונעת שינוי תוכן. אם החישוב דורש קלט בלתי משתנה, נעתיק אותו או נגדיר מנגנון ownership ושיתוף שמספק את ההבטחה. אין לטעון ש־MDL הפך buffer משותף ל־readonly רק מפני שהוא כעת נגיש מתוך kernel address space.