The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Университет Миннесоты отстранён от разработки ядра Linux за отправку сомнительных патчей, opennews (??), 21-Апр-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


103. "Университет Миннесоты отстранён от разработки ядра Linux за ..."  –7 +/
Сообщение от bOOster (ok), 22-Апр-21, 07:15 
Насмешил.

Такие проверки здравые люди проводят на альтернативных сборках ядра.

А во вторых - проверка указателя перед удалением это всегда Must have. Чувак Greg KH вообще дальше носа своего не видит заявляя что проверка указателя не имеет смысла. Это беспросветная тупость в многозадачных/многопоточных системах.

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

113. "Университет Миннесоты отстранён от разработки ядра Linux за ..."  +8 +/
Сообщение от Аноним (76), 22-Апр-21, 08:10 
> Чувак Greg KH вообще дальше носа своего не видит

Лол, да, Greg KH вообще в ядре не разбирается. 🙂

Ты же в курсе, кто такой Greg KH, да?

Ответить | Правка | Наверх | Cообщить модератору

127. "Университет Миннесоты отстранён от разработки ядра Linux за ..."  +/
Сообщение от n00by (ok), 22-Апр-21, 09:31 
> заявляя что
> проверка указателя не имеет смысла. Это беспросветная тупость в многозадачных/многопоточных
> системах.

Заявил он по смыслу иное, цитирую:

> -    gss_release_msg(gss_msg);
> +    if (gss_msg)
> +        gss_release_msg(gss_msg);a

If you look at the code, this is impossible to have happen.

Вы подменили тезис, поставив под сомнение компетентность рецензента.

Давайте теперь вместе выполним просьбу Грега и посмотрим на код


static void
gss_pipe_destroy_msg(struct rpc_pipe_msg *msg)
{
    struct gss_upcall_msg *gss_msg = container_of(msg, struct gss_upcall_msg, msg);

    if (msg->errno < 0) {
        refcount_inc(&gss_msg->count);
        gss_unhash_msg(gss_msg);
        if (msg->errno == -ETIMEDOUT)
            warn_gssd();
        gss_release_msg(gss_msg);
    }
    gss_release_msg(gss_msg);
}

Ответить | Правка | К родителю #103 | Наверх | Cообщить модератору

128. "Университет Миннесоты отстранён от разработки ядра Linux за ..."  +/
Сообщение от n00by (ok), 22-Апр-21, 09:38 

static const struct rpc_pipe_ops gss_upcall_ops_v1 = {
    .upcall        = gss_v1_upcall,
    .downcall    = gss_pipe_downcall,
    .destroy_msg    = gss_pipe_destroy_msg,
    .open_pipe    = gss_pipe_open_v1,
    .release_pipe    = gss_pipe_release,
};

/// ...

static int
rpc_pipe_release(struct inode *inode, struct file *filp)
{
    struct rpc_pipe *pipe;
    struct rpc_pipe_msg *msg;
    int last_close;

    inode_lock(inode);
    pipe = RPC_I(inode)->pipe;
    if (pipe == NULL)
        goto out;
    msg = filp->private_data;
    if (msg != NULL) {
        spin_lock(&pipe->lock);
        msg->errno = -EAGAIN;
        list_del_init(&msg->list);
        spin_unlock(&pipe->lock);
        pipe->ops->destroy_msg(msg);
    }

> Чувак Greg KH вообще дальше носа своего не видит

Вот тут  https://joindiaspora.com/uploads/images/scaled_full_b39c6332...
хорошо видно, куда направлены глаза.

Ответить | Правка | Наверх | Cообщить модератору

212. "Университет Миннесоты отстранён от разработки ядра Linux за ..."  +1 +/
Сообщение от Аноним (76), 23-Апр-21, 05:44 
>[оверквотинг удален]
>    struct gss_upcall_msg *gss_msg = container_of(msg, struct gss_upcall_msg, msg);
>    if (msg->errno < 0) {
>        refcount_inc(&gss_msg->count);
>        gss_unhash_msg(gss_msg);
>        if (msg->errno == -ETIMEDOUT)
>            warn_gssd();
>        gss_release_msg(gss_msg);
>    }
>    gss_release_msg(gss_msg);
> }

Тут вся фишка в том, что `container_of(msg, struct gss_upcall_msg, msg)` возвращает разность вроде `(void*)msg - offsetof(struct gss_upcall_msg, msg)`.

То есть `gss_msg` в принципе не может быть NULL, и проверка `if (gss_msg)` абсолютно бесполезна.

Ответить | Правка | К родителю #127 | Наверх | Cообщить модератору

215. "Университет Миннесоты отстранён от разработки ядра Linux за ..."  +/
Сообщение от n00by (ok), 23-Апр-21, 09:42 
>[оверквотинг удален]
>>        if (msg->errno == -ETIMEDOUT)
>>            warn_gssd();
>>        gss_release_msg(gss_msg);
>>    }
>>    gss_release_msg(gss_msg);
>> }
> Тут вся фишка в том, что `container_of(msg, struct gss_upcall_msg, msg)` возвращает разность
> вроде `(void*)msg - offsetof(struct gss_upcall_msg, msg)`.
> То есть `gss_msg` в принципе не может быть NULL, и проверка `if
> (gss_msg)` абсолютно бесполезна.

Эх :(
Мнение эксперта по тупости Грега в многозадачных/многопоточных системах теперь точно не увидим. :)

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру