<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.3314" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Arial color=#0000ff size=2><SPAN class=290103414-31082008>Hi
Leonid,</SPAN></FONT></DIV><BR>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left><SPAN
class=702563616-27082008><FONT face=Arial color=#0000ff size=2><SPAN
class=290103414-31082008>The patch fix accessing p_user_attr field which lead to
access violation, t</SPAN></FONT></SPAN><SPAN class=702563616-27082008><FONT
face=Arial color=#0000ff size=2><SPAN class=290103414-31082008>he actual
field is p_pnp_attr.</SPAN></FONT></SPAN></DIV>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left><SPAN
class=702563616-27082008><FONT face=Arial color=#0000ff size=2><SPAN
class=290103414-31082008>It also moves port checking to the head of the function
stack.</SPAN></FONT></SPAN></DIV>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left><SPAN
class=702563616-27082008><FONT face=Arial color=#0000ff size=2><SPAN
class=290103414-31082008></SPAN></FONT></SPAN> </DIV>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left><SPAN
class=702563616-27082008><FONT face=Arial color=#0000ff size=2><SPAN
class=290103414-31082008>Thanks, Reuven.</SPAN></FONT></SPAN></DIV>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left><SPAN
class=702563616-27082008><FONT face=Arial color=#0000ff size=2><SPAN
class=290103414-31082008></SPAN></FONT></SPAN> </DIV>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left><SPAN
class=702563616-27082008><FONT face=Arial color=#0000ff size=2><SPAN
class=290103414-31082008>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>></SPAN></FONT></SPAN></DIV>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left><SPAN
class=702563616-27082008><FONT face=Arial color=#0000ff size=2><SPAN
class=290103414-31082008>Index:
core/al/al_av.c<BR>===================================================================<BR>---
core/al/al_av.c (revision 1534)<BR>+++ core/al/al_av.c (working
copy)<BR>@@ -112,7 +112,23 @@<BR> }<BR> <BR> <BR>+static
ib_api_status_t<BR>+__check_av_port(<BR>+ IN const al_ci_ca_t* const p_ci_ca,<BR>+ IN const ib_av_attr_t*
const p_av_attr )<BR>+{<BR>+ ib_api_status_t status =
IB_SUCCESS;<BR> <BR>+ if (p_av_attr->port_num == 0 ||
p_av_attr->port_num >
p_ci_ca->num_ports)<BR>+ {<BR>+ AL_PRINT(TRACE_LEVEL_WARNING
,AL_DBG_AV,<BR>+ ("invalid port number specified (%d)\n",
p_av_attr->port_num) );<BR>+ status =
IB_INVALID_PORT;<BR>+ }<BR>+ return
status;<BR>+}<BR>+<BR>+<BR> ib_api_status_t<BR> create_av(<BR> IN const ib_pd_handle_t h_pd,<BR>@@
-137,6 +153,13 @@<BR> return
IB_INVALID_PD_HANDLE;<BR> }<BR> <BR>+ status =
__check_av_port(h_pd->obj.p_ci_ca, p_av_attr);<BR>+ if( status !=
IB_SUCCESS )<BR>+ {<BR>+ AL_PRINT_EXIT( TRACE_LEVEL_ERROR,
AL_DBG_ERROR, ("IB_INVALID_PORT\n") );<BR>+ return
status;<BR>+ }<BR>+ <BR> /* Get an AV tracking structure.
*/<BR> h_av = alloc_av();<BR> if( !h_av )<BR>@@ -302,6
+325,13 @@<BR> return
IB_INVALID_PARAMETER;<BR> }<BR> <BR>+ status =
__check_av_port(h_av->obj.p_ci_ca, p_av_mod);<BR>+ if( status !=
IB_SUCCESS )<BR>+ {<BR>+ AL_PRINT_EXIT( TRACE_LEVEL_ERROR,
AL_DBG_ERROR, ("IB_INVALID_PORT\n") );<BR>+ return
status;<BR>+ }<BR>+<BR> status = verbs_modify_av(h_av,
p_av_mod);<BR> <BR> /* Record av for special qp access
*/<BR>Index:
core/al/user/ual_av.c<BR>===================================================================<BR>---
core/al/user/ual_av.c (revision 1534)<BR>+++
core/al/user/ual_av.c (working copy)<BR>@@ -58,17 +58,7
@@<BR> uint16_t i;<BR> <BR> ci_ca_lock_attr(
p_ci_ca );<BR>-<BR>- // sanity check<BR>- if (port_num == 0 ||
port_num >
p_ci_ca->p_user_attr->num_ports)<BR>- {<BR>- AL_PRINT(TRACE_LEVEL_WARNING
,AL_DBG_AV,<BR>- ("UAL_GET_GID_INDEX: invalid port number
specified (%d)\n", port_num) );<BR>- status =
IB_INVALID_PORT;<BR>- goto
out;<BR>- }<BR>-<BR>- p_port_attr =
&p_ci_ca->p_user_attr->p_port_attr[port_num];<BR>+ p_port_attr =
&p_ci_ca->p_pnp_attr->p_port_attr[port_num];<BR> for( i =
0; i < p_port_attr->num_gids; i++
)<BR> {<BR> if( !cl_memcmp(p_gid,
&p_port_attr->p_gid_table[i], sizeof(ib_gid_t)) )<BR>@@ -78,8 +68,6
@@<BR> break;<BR> }<BR> }<BR>-<BR>-out:<BR> ci_ca_unlock_attr(
p_ci_ca );<BR> <BR> return
status;<BR></SPAN></FONT></SPAN></DIV></BODY></HTML>