Unverified Commit e2ddfe64 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!10621 fix CVE-2024-42129

Merge Pull Request from: @ci-robot 
 
PR sync from: Tengda Wu <wutengda2@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/FGQ4QGT4I5M3NPNFS662CP33DWRBJC55/ 
This patch set is going to fix CVE-2024-42129.

George Stark (2):
  locking/mutex: Introduce devm_mutex_init()
  leds: mlxreg: Use devm_mutex_init() for mutex initialization


-- 
2.34.1
 
https://gitee.com/src-openeuler/kernel/issues/IAGS4V 
 
Link:https://gitee.com/openeuler/kernel/pulls/10621

 

Reviewed-by: default avatarYe Weihua <yeweihua4@huawei.com>
Reviewed-by: default avatarXu Kuohai <xukuohai@huawei.com>
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
parents d371207f 9e437bc3
Loading
Loading
Loading
Loading
+5 −11
Original line number Diff line number Diff line
@@ -257,6 +257,7 @@ static int mlxreg_led_probe(struct platform_device *pdev)
{
	struct mlxreg_core_platform_data *led_pdata;
	struct mlxreg_led_priv_data *priv;
	int err;

	led_pdata = dev_get_platdata(&pdev->dev);
	if (!led_pdata) {
@@ -268,28 +269,21 @@ static int mlxreg_led_probe(struct platform_device *pdev)
	if (!priv)
		return -ENOMEM;

	mutex_init(&priv->access_lock);
	err = devm_mutex_init(&pdev->dev, &priv->access_lock);
	if (err)
		return err;

	priv->pdev = pdev;
	priv->pdata = led_pdata;

	return mlxreg_led_config(priv);
}

static int mlxreg_led_remove(struct platform_device *pdev)
{
	struct mlxreg_led_priv_data *priv = dev_get_drvdata(&pdev->dev);

	mutex_destroy(&priv->access_lock);

	return 0;
}

static struct platform_driver mlxreg_led_driver = {
	.driver = {
	    .name = "leds-mlxreg",
	},
	.probe = mlxreg_led_probe,
	.remove = mlxreg_led_remove,
};

module_platform_driver(mlxreg_led_driver);
+27 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@
#include <linux/osq_lock.h>
#include <linux/debug_locks.h>

struct device;

struct ww_acquire_ctx;

/*
@@ -150,6 +152,31 @@ extern void __mutex_init(struct mutex *lock, const char *name,
 */
extern bool mutex_is_locked(struct mutex *lock);

#ifdef CONFIG_DEBUG_MUTEXES

int __devm_mutex_init(struct device *dev, struct mutex *lock);

#else

static inline int __devm_mutex_init(struct device *dev, struct mutex *lock)
{
	/*
	 * When CONFIG_DEBUG_MUTEXES is off mutex_destroy() is just a nop so
	 * no really need to register it in the devm subsystem.
	 */
	return 0;
}

#endif

#define devm_mutex_init(dev, mutex)			\
({							\
	typeof(mutex) mutex_ = (mutex);			\
							\
	mutex_init(mutex_);				\
	__devm_mutex_init(dev, mutex_);			\
})

/*
 * See kernel/locking/mutex.c for detailed documentation of these APIs.
 * Also see Documentation/locking/mutex-design.rst.
+12 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
 */
#include <linux/mutex.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/export.h>
#include <linux/poison.h>
#include <linux/sched.h>
@@ -90,6 +91,17 @@ void debug_mutex_init(struct mutex *lock, const char *name,
	lock->magic = lock;
}

static void devm_mutex_release(void *res)
{
	mutex_destroy(res);
}

int __devm_mutex_init(struct device *dev, struct mutex *lock)
{
	return devm_add_action_or_reset(dev, devm_mutex_release, lock);
}
EXPORT_SYMBOL_GPL(__devm_mutex_init);

/***
 * mutex_destroy - mark a mutex unusable
 * @lock: the mutex to be destroyed