Red Hat Bugzilla – Bug 128848
memory-attribute bits not preserved when changing protections
Last modified: 2007-11-30 17:07:03 EST
Description of problem:
This problem is causing our machines to reboot on IA64 when running
certain applications over a Quadrics ELAN4 switch. The Quadrics
engineers investigated the problem and have provided an explanation
as to the cause of the problem which I've shown below. We did
recompile the kernel with the suggested fix, also shown below, and it
does appear to correct the problem.
The problem looks to be that the change_protection() function in the
linux kernel changes the protection using the pte_modify() macro.
This only preserves the PPN, and accessed & dirty bits. So the pte
that is generated has "lost" the memory-attribute bits and so is
Interestingly this code is changed in the 2.6.8 kernels and is
Please backport the fixes from asm-ia64/pgtable.h from 2.6.7 to 2.4.21
/* Mask of bits which may be changed by pte_modify(); the odd bits
are there for _PAGE_PROTNONE */
#define _PAGE_CHG_MASK (_PAGE_P | _PAGE_PROTNONE | _PAGE_PL_MASK |
_PAGE_AR_MASK | _PAGE_ED)
#define pte_modify(_pte, newprot) \
(__pte((pte_val(_pte) & ~_PAGE_CHG_MASK) | (pgprot_val
(newprot) & _PAGE_CHG_MASK)))
Version-Release number of selected component (if applicable):
This problem is reproducible using a combination of hardware and
software. I do not have a simple reproducer at this time, however.
Steps to Reproduce:
Do you still see this problem on RHEL3 U7 ? Please update your result so that
this can be address soon.
This bug is filed against RHEL 3, which is in maintenance phase.
During the maintenance phase, only security errata and select mission
critical bug fixes will be released for enterprise products. Since
this bug does not meet that criteria, it is now being closed.
For more information of the RHEL errata support policy, please visit:
If you feel this bug is indeed mission critical, please contact your
support representative. You may be asked to provide detailed
information on how this bug is affecting you.