<font size=2 face="sans-serif">Hello Mike,</font>
<br>
<br><font size=2 face="sans-serif">I'm sorry to send you the wrong patch,</font>
<br><font size=2 face="sans-serif">I'll send a new patch to you later.</font>
<br>
<br><font size=2 face="sans-serif">Thanks</font>
<br><font size=2 face="sans-serif">Tang</font>
<br>
<br>
<br>
<br><font size=1 color=#5f5f5f face="sans-serif">发件人:    
    </font><font size=1 face="sans-serif">Mike Snitzer
<snitzer@redhat.com></font>
<br><font size=1 color=#5f5f5f face="sans-serif">收件人:    
    </font><font size=1 face="sans-serif">tang.junhui@zte.com.cn,
</font>
<br><font size=1 color=#5f5f5f face="sans-serif">抄送:    
   </font><font size=1 face="sans-serif">zhang.kai16@zte.com.cn,
dm-devel@redhat.com, agk@redhat.com</font>
<br><font size=1 color=#5f5f5f face="sans-serif">日期:    
    </font><font size=1 face="sans-serif">2016/11/03
23:33</font>
<br><font size=1 color=#5f5f5f face="sans-serif">主题:    
   </font><font size=1 face="sans-serif">Re: [dm-devel]
dm mpath: add check for count of groups to avoid wild pointer access</font>
<br><font size=1 color=#5f5f5f face="sans-serif">发件人:    
   </font><font size=1 face="sans-serif">dm-devel-bounces@redhat.com</font>
<br>
<hr noshade>
<br>
<br>
<br><tt><font size=2>On Thu, Nov 03 2016 at  6:49am -0400,<br>
tang.junhui@zte.com.cn <tang.junhui@zte.com.cn> wrote:<br>
<br>
> From: "tang.junhui" <tang.junhui@zte.com.cn><br>
> <br>
> pg is not assigned to a group address when count of multipath groups<br>
> is zero in bypass_pg_num(), then it is used in bypass_pg(), which
may<br>
> cause wild pointer access.<br>
> <br>
> Signed-off-by: tang.junhui <tang.junhui@zte.com.cn><br>
> ---<br>
>  drivers/md/dm-mpath.c | 2 +-<br>
>  1 file changed, 1 insertion(+), 1 deletion(-)<br>
> <br>
> diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c<br>
> index d376dc8..8c1359c 100644<br>
> --- a/drivers/md/dm-mpath.c<br>
> +++ b/drivers/md/dm-mpath.c<br>
> @@ -1084,7 +1084,7 @@ static int switch_pg_num(struct multipath *m,
const char *pgstr)<br>
>                  
char dummy;<br>
>  <br>
>                  
if (!pgstr || (sscanf(pgstr, "%u%c", &pgnum, &dummy)
!= 1) || !pgnum ||<br>
> -                
    (pgnum > m->nr_priority_groups)) {<br>
> +                
    !m->nr_priority_groups || (pgnum > m->nr_priority_groups))
{<br>
>                  
                 DMWARN("invalid
PG number supplied to switch_pg_num");<br>
>                  
                 return
-EINVAL;<br>
>                  
}<br>
> -- <br>
> 2.8.1.windows.1<br>
> <br>
> <br>
<br>
You mention bypass_pg_num() going on to hit a NULL/"wild" pointer.
 Not<br>
immediately seeing the relation between switch_pg_num() and<br>
bypass_pg_num().  But shouldn't bypass_pg_num() have improved bounds<br>
checking (and/or NULL pointer checks) too?<br>
<br>
Maybe your patch was applied with an offset and it modified<br>
switch_pg_num() when you really meant to modify bypass_pg_num()?<br>
<br>
--<br>
dm-devel mailing list<br>
dm-devel@redhat.com<br>
</font></tt><a href="https://www.redhat.com/mailman/listinfo/dm-devel"><tt><font size=2>https://www.redhat.com/mailman/listinfo/dm-devel</font></tt></a><tt><font size=2><br>
</font></tt>
<br>