fixed null segment validation (aka x86_64 regression bug)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1708 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									d3e9db933f
								
							
						
					
					
						commit
						cd072e01d8
					
				@ -1987,6 +1987,13 @@ static inline void validate_seg(int seg_reg, int cpl)
 | 
			
		||||
    int dpl;
 | 
			
		||||
    uint32_t e2;
 | 
			
		||||
 | 
			
		||||
    /* XXX: on x86_64, we do not want to nullify FS and GS because
 | 
			
		||||
       they may still contain a valid base. I would be interested to
 | 
			
		||||
       know how a real x86_64 CPU behaves */
 | 
			
		||||
    if ((seg_reg == R_FS || seg_reg == R_GS) && 
 | 
			
		||||
        (env->segs[seg_reg].selector & 0xfffc) == 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    e2 = env->segs[seg_reg].flags;
 | 
			
		||||
    dpl = (e2 >> DESC_DPL_SHIFT) & 3;
 | 
			
		||||
    if (!(e2 & DESC_CS_MASK) || !(e2 & DESC_C_MASK)) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user