Подробности

[В начало]

Проблема в реализации № L0014

Краткое описание

drivers/hid/hidraw.c: Двойной mutex_lock

Подробное описание

В драйвере drivers/hid/hidraw.c в функции hidraw_read может быть двойной mutex_lock: Путь:

  • Строка 50: начало первой итерации цикла "while(ret==0)"
  • Строка 52: первый вызов mutex_lock
  • Внутренний цикл "while (list->head == list->tail)" не изменяет состояния mutex.
  • Если начинается вторая итерация цикла "while(ret == 0)" в строке 50, то второй раз вызывается mutex_lock в строке 52.
  • Вторая итерация цикла "while(ret==0)" возможна, если локальная переменная ret не меняется в строке 94: ret+=len - т.е. len==0; Переменная len может быть равна нулю, если hidraw_read вызывается с параметром count==0 или list->buffer[list->tail].len == 0.

    Компонент

    linux-kernel 2.6.31

    Принято

    http://lkml.org/lkml/2009/10/12/101, commit b0e14951ee0f6c29abc64b92ec7075a159ede37c

    Статус

    Исправлено в ядре 2.6.32

    [В начало]