Skip to content

Commit

Permalink
Fix os crash caused by optoe when class switch (sonic-net#413)
Browse files Browse the repository at this point in the history
When the device is initially set to optoe2, there is an option->client[1].
If echo 3>dev_class is manually set at this time, as for optoe3, option->client[1] is meaningless
but the content is still the address data of optoe2, accessing an illegal address will occur, causing the device to crash.

Set option ->client[1] to NULL when unregistering device

Signed-off-by: philo <philo@micasnetworks.com>
  • Loading branch information
philo-micas committed Jul 3, 2024
1 parent a128c86 commit 9031ab7
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
36 changes: 36 additions & 0 deletions patch/0001-fix-os-crash-caused-by-optoe-when-class-switch.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
From b8ba60c6d604fee3f61e3d1e709e86c785b075f4 Mon Sep 17 00:00:00 2001
From: philo <philo@micasnetworks.com>
Date: Mon, 1 Jul 2024 11:03:35 +0800
Subject: [PATCH] fix os crash caused by optoe when class switch

---
drivers/misc/eeprom/optoe.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/misc/eeprom/optoe.c b/drivers/misc/eeprom/optoe.c
index 9129312a1..a6bdbb9d1 100644
--- a/drivers/misc/eeprom/optoe.c
+++ b/drivers/misc/eeprom/optoe.c
@@ -941,8 +941,10 @@ static ssize_t set_dev_class(struct device *dev,
} else {
/* one-address (eg QSFP) and CMIS family */
/* if it exists, remove 0x51 i2c address */
- if (optoe->client[1])
+ if (optoe->client[1]) {
i2c_unregister_device(optoe->client[1]);
+ optoe->client[1] = NULL;
+ }
optoe->bin.size = ONE_ADDR_EEPROM_SIZE;
optoe->num_addresses = 1;
}
@@ -1226,6 +1228,7 @@ static int optoe_probe(struct i2c_client *client,
if (num_addresses == 2) {
if (optoe->client[1])
i2c_unregister_device(optoe->client[1]);
+ optoe->client[1] = NULL;
}

kfree(optoe->writebuf);
--
2.25.1

3 changes: 3 additions & 0 deletions patch/series
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,9 @@ cisco-npu-disable-other-bars.patch
# Security patch
0001-Change-the-system.map-file-permission-only-readable-.patch

# Micas patches
0001-fix-os-crash-caused-by-optoe-when-class-switch.patch

#
#
############################################################
Expand Down

0 comments on commit 9031ab7

Please sign in to comment.