MIPS: OCTEON: make get_system_type() thread-safe
authorAaro Koskinen <aaro.koskinen@nsn.com>
Tue, 22 Jul 2014 11:51:08 +0000 (14:51 +0300)
committerRalf Baechle <ralf@linux-mips.org>
Tue, 19 Aug 2014 16:24:42 +0000 (18:24 +0200)
commit608308682addfdc7b8e2aee88f0e028331d88e4d
treedbf68401067b7d6582d55705afb23ab374c57329
parent6521d9a436a62e83ce57d6be6e5484e1098c1380
MIPS: OCTEON: make get_system_type() thread-safe

get_system_type() is not thread-safe on OCTEON. It uses static data,
also more dangerous issue is that it's calling cvmx_fuse_read_byte()
every time without any synchronization. Currently it's possible to get
processes stuck looping forever in kernel simply by launching multiple
readers of /proc/cpuinfo:

(while true; do cat /proc/cpuinfo > /dev/null; done) &
(while true; do cat /proc/cpuinfo > /dev/null; done) &
...

Fix by initializing the system type string only once during the early
boot.

Signed-off-by: Aaro Koskinen <aaro.koskinen@nsn.com>
Cc: stable@vger.kernel.org
Reviewed-by: Markos Chandras <markos.chandras@imgtec.com>
Patchwork: http://patchwork.linux-mips.org/patch/7437/
Signed-off-by: James Hogan <james.hogan@imgtec.com>
arch/mips/cavium-octeon/setup.c