Thread (8 messages) 8 messages, 4 authors, 2021-07-09

Re: [PATCH v4] tty: serial: jsm: allocate queue buffer at probe time

From: Zheyu Ma <hidden>
Date: 2021-07-07 12:28:27
Also in: lkml

On Wed, Jul 7, 2021 at 3:49 PM Jiri Slaby [off-list ref] wrote:
On 05. 07. 21, 14:53, Zheyu Ma wrote:
quoted
In function 'neo_intr', the driver uses 'ch->ch_equeue' and
'ch->ch_reuque'. These two pointers are initialized in 'jsm_tty_open',
but the interrupt handler 'neo_intr' has been registered in the probe
progress. If 'jsm_tty_open' has not been called at this time, it will
cause null pointer dereference.

Once the driver registers the interrupt handler, the driver should be
ready to handle it.

Fix this by allocating the memory at probe time and not at open time.
You are allocating the buffer in jsm_tty_init now. But that is still
called after request_irq() in probe. So care to explain how this helps
exactly? As I understand it, you only made the window much smaller.
You are right, this may indeed still cause problems, I did not
consider this before. So maybe we should put request_irq() at the end
of the probe function.
Anyway, I'm no expert on jsm, but AFAICS jsm_tty_open first allocates
the buffers, brd->bd_ops->uart_init() / neo_uart_init() clears ier and
only brd->bd_ops->param() / neo_param() enables interrupts on the device
(by ier update and write). So how it comes an interrupt came before
neo_param() in jsm_tty_open was called?
I considered the threat from a malicious device, which means that a
harmful peripheral may not comply with the driver's convention,
arbitrary send interrupt signals, or send malicious data. I think the
driver should also handle this situation, at least to prevent the
kernel from crashing.

Thanks,

Zheyu Ma
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help