I have made the following changes to the "drivers/input/mousedev.c" file: 1. 'mousedev_write()', 'mousedev_read()': The changes protect an application using the 'read()' function from waiting indefinitely for a disconnected mouse. If the application performs a read or write operation on the disconnected device, the call fails with the 'ENODEV' error code. This behavior of the 'read()' and 'write()' functions is proposed in the "drivers/usb/usb-skeleton.c" file. 2. 'mousedev_poll()': The changes protect an application using the 'select()' function from waiting indefinitely for a disconnected mouse. If the mouse was disconnected, each file descriptor of the respective device file is assumed to be always ready for reading. The device disconnection is assumed to be a permanent exceptional condition on the file descriptor. The 'select()' function treats that file descriptor as a valid and ready one. So if the file descriptor is contained in a descriptor set supplied to a 'select()' call as an argument, then the 'select()' function adds that file descriptor to the respective output descriptor set, i.e., sets the appropriate bit of the respective 'fd_set' input variable. In this case the function returns successfully. The mouse disconnection and the unusable file descriptor can be easily detected by checking the results of the successive 'read()' calls, which make use of the results of the 'select()' call, for the 'ENODEV' error. 3. 'mousedev_disconnect()': a) Sending a 'SIGIO' signal. This 'SIGIO' signal protects an application using the 'sigsuspend()' function from waiting indefinitely for a 'SIGIO' signal. If a file descriptor corresponds to a device special file representing a mouse, and the 'O_ASYNC' status flag is set on that file descriptor, a 'SIGIO' signal is generated when the mouse becomes disconnected. b) The pointers in the 'mousedev_table' are used only by the 'mousedev_open()' and 'mousedev_connect()' functions, so the 'mousedev_disconnect()' function can safely remove the pointer corresponding to the disconnected mouse from the 'mousedev_table'. 4. 'mousedev_free()': The line "mousedev_table[mousedev->minor] = NULL;" is moved into the 'mousedev_disconnect()' function.