Подробности

[В начало]

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

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

drivers/net/wan/farsync.c: Вызов module_get() без module_put() на пути обработки ошибки в fst_open()

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

Функция fst_open() после успешного try_module_get() может вернуть код ошибки, если его возвращает hdlc_open(). При этом, однако, не вызывается module_put().

Способы устранения

diff --git a/drivers/net/wan/farsync.c b/drivers/net/wan/farsync.c
index e050bd6..777d1a4 100644
--- a/drivers/net/wan/farsync.c
+++ b/drivers/net/wan/farsync.c
@@ -2203,8 +2203,10 @@ fst_open(struct net_device *dev)
 
 	if (port->mode != FST_RAW) {
 		err = hdlc_open(dev);
-		if (err)
+		if (err) {
+			module_put(THIS_MODULE);
 			return err;
+		}
 	}
 
 	fst_openport(port);

Компонент

linux-kernel 2.6.39

Ссылки

https://lkml.org/lkml/2011/6/17/266

Принято

https://lkml.org/lkml/2011/6/17/320 commit d0fd64c

Статус

Исправлено в kernel 3.0-rc4

[В начало]