|
Lines 110-116
Link Here
|
| 110 |
typedef struct ses_element { |
110 |
typedef struct ses_element { |
| 111 |
uint8_t eip; /* eip bit is set */ |
111 |
uint8_t eip; /* eip bit is set */ |
| 112 |
uint16_t descr_len; /* length of the descriptor */ |
112 |
uint16_t descr_len; /* length of the descriptor */ |
| 113 |
char *descr; /* descriptor for this object */ |
113 |
const char *descr; /* descriptor for this object */ |
| 114 |
struct ses_addl_status addl; /* additional status info */ |
114 |
struct ses_addl_status addl; /* additional status info */ |
| 115 |
} ses_element_t; |
115 |
} ses_element_t; |
| 116 |
|
116 |
|
|
Lines 1977-1982
Link Here
|
| 1977 |
return (0); |
1977 |
return (0); |
| 1978 |
} |
1978 |
} |
| 1979 |
|
1979 |
|
|
|
1980 |
/* |
| 1981 |
* \brief Sanitize an element descriptor |
| 1982 |
* |
| 1983 |
* The SES4r3 standard, sections 3.1.2 and 6.1.10, specifies that element |
| 1984 |
* descriptors may only contain ASCII characters in the range 0x20 to 0x7e. |
| 1985 |
* But some vendors violate that rule. Ensure that we only expose compliant |
| 1986 |
* descriptors to userland. |
| 1987 |
* |
| 1988 |
* \param desc SES element descriptor as reported by the hardware |
| 1989 |
* \param len Length of desc in bytes, not necessarily including |
| 1990 |
* trailing NUL |
| 1991 |
*/ |
| 1992 |
static const char* |
| 1993 |
ses_sanitize_elm_desc(char *desc, int len) |
| 1994 |
{ |
| 1995 |
int i; |
| 1996 |
|
| 1997 |
for (i = 0; i < len; i++) { |
| 1998 |
if (desc[i] < 0x20 || desc[i] > 0x7e) { |
| 1999 |
return ("<invalid>"); |
| 2000 |
} else if (desc[i] == 0) { |
| 2001 |
break; |
| 2002 |
} |
| 2003 |
} |
| 2004 |
return (desc); |
| 2005 |
} |
| 2006 |
|
| 1980 |
/** |
2007 |
/** |
| 1981 |
* \brief Parse the descriptors for each object. |
2008 |
* \brief Parse the descriptors for each object. |
| 1982 |
* |
2009 |
* |
|
Lines 2061-2067
Link Here
|
| 2061 |
if (length > 0) { |
2088 |
if (length > 0) { |
| 2062 |
elmpriv = element->elm_private; |
2089 |
elmpriv = element->elm_private; |
| 2063 |
elmpriv->descr_len = length; |
2090 |
elmpriv->descr_len = length; |
| 2064 |
elmpriv->descr = &buf[offset]; |
2091 |
elmpriv->descr = ses_sanitize_elm_desc(&buf[offset], |
|
|
2092 |
length); |
| 2065 |
} |
2093 |
} |
| 2066 |
|
2094 |
|
| 2067 |
/* skip over the descriptor itself */ |
2095 |
/* skip over the descriptor itself */ |