由于不合理的检查,发现了潜在的空指针解引用
在转口-分配 ' 功能中,由于不合理的检查,我认为有可能造成NPD。 在C语言中, " -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 函数中的代码检查变量 " tp " NULL; 但是,如果是NULL, “NPD” 是由于--------操作而发生的。
案例1
https://GitHub.com/cotur/cotur/blob/242467faba87b434fa901841ec72c4fe3da79d5d/src/apps/relay/turn ports.c#L165
页:1 int 转口 allocate( 转口 *tp) {
内端口=-1;
TURN MUTEQLOCK( &tp- > mutex); //QQ NPD 此处
如果(tp) { / { { { 在此处检查。 /.. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
TURN MUTEQUNLOCK( &tp- > mutex) ;
返回端口; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
案例2
" 转口-释放 " 功能也会出现同样的情况。
> https://GitHub.com/cotur/coturn/blob/242467faba87b434fa901841ec72c4fe3da79d5d/src/apps/relay/turn ports.c#L206
页:1
空转口 释放( 转口 * tp, uint16 t port) {
TURN MUTEQLOCK( &tp- > mutex); //QQ NPD 此处
如果 (tp + 端口 + tp- > range start + 端口 + tp- > range stop) { /\ + 邮购此处 。
const uint16 t 位置=(uint16 t)(tp->高 & 0x000FF);
如果(是) taken(tp- > status [port]){
tp - > status [port] = tp - >高;
tp->端口[位置]=端口;
++(tp->高;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
TURN MUTEQUNLOCK( &tp- > mutex) ;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?案例3
在“turnports allocate even”函数中发生更可怕的事,它检查“tp”是否是NULL;然而,当“tp”是NULL时,它将执行“TURN MUTE UNLOCK(和tp->mutex)”的代码,这将直接导致NPD。
https://GitHub.com/conturn/coturn/blob/242467faba87b434fa901841ec72c4fe3da79d5d/src/apps/relay/turn ports.c#L219
页:1 int turnports allocate even(turnports *tp, int disaction rtcp, int 64 t * 保留 token){ 如果(tp) { / / * { 在此预选 TURN MUTEQLOCK( &tp- > mutex) ; /.. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
TURN MUTEX UNLOCK( &tp- > mutex); //============ NPD 这里
返回 -1; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
内容来源: coturn/coturn