I'm sorry I said the wrong thing.

 

First of all, page fault isn't blocked by cli instuction.

Page fault is a type of fulat(not a interrupt)

 

This log is printed from the page fault handler. 

 

> [ 4024.792614] #PF: supervisor write access in kernel mode

> [ 4024.793944] #PF: error_code(0x0002) - not-present page

> [ 4024.794920] PGD 0 P4D 0 

 

But, the strange thing is that the address where the page fault occurred is a strange address(0x000000008004020b).

This address looks similar to the value of cr0. Adding 8*59 to this cr0 value immediately 

results in the address where the page fault occurred.

 

cr0 = 0x0000000080040033

cr2 = 0x000000008004020B

 

cr2 == cr0[59]

 

This is because the rax register was missing from the clobber field of the inline assembly.