forked from Bananymous/banan-os
				
			Kernel: Fix spinlock bugs found by the new spinlock security
This commit is contained in:
		
							parent
							
								
									6542a037df
								
							
						
					
					
						commit
						692ba43182
					
				|  | @ -281,10 +281,11 @@ namespace Kernel | |||
| 		if (!is_streaming()) | ||||
| 			m_packet_sizes.push(packet.size()); | ||||
| 
 | ||||
| 		epoll_notify(EPOLLIN); | ||||
| 
 | ||||
| 		m_packet_thread_blocker.unblock(); | ||||
| 		m_packet_lock.unlock(state); | ||||
| 
 | ||||
| 		epoll_notify(EPOLLIN); | ||||
| 
 | ||||
| 		return {}; | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -88,18 +88,20 @@ namespace Kernel | |||
| 
 | ||||
| 	bool PseudoTerminalMaster::putchar(uint8_t ch) | ||||
| 	{ | ||||
| 		SpinLockGuard _(m_buffer_lock); | ||||
| 		{ | ||||
| 			SpinLockGuard _(m_buffer_lock); | ||||
| 
 | ||||
| 		if (m_buffer_size >= m_buffer->size()) | ||||
| 			return false; | ||||
| 			if (m_buffer_size >= m_buffer->size()) | ||||
| 				return false; | ||||
| 
 | ||||
| 		reinterpret_cast<uint8_t*>(m_buffer->vaddr())[(m_buffer_tail + m_buffer_size) % m_buffer->size()] = ch; | ||||
| 		m_buffer_size++; | ||||
| 			reinterpret_cast<uint8_t*>(m_buffer->vaddr())[(m_buffer_tail + m_buffer_size) % m_buffer->size()] = ch; | ||||
| 			m_buffer_size++; | ||||
| 
 | ||||
| 			m_buffer_blocker.unblock(); | ||||
| 		} | ||||
| 
 | ||||
| 		epoll_notify(EPOLLIN); | ||||
| 
 | ||||
| 		m_buffer_blocker.unblock(); | ||||
| 
 | ||||
| 		return true; | ||||
| 	} | ||||
| 
 | ||||
|  | @ -130,10 +132,10 @@ namespace Kernel | |||
| 		m_buffer_size -= to_copy; | ||||
| 		m_buffer_tail = (m_buffer_tail + to_copy) % m_buffer->size(); | ||||
| 
 | ||||
| 		epoll_notify(EPOLLOUT); | ||||
| 
 | ||||
| 		m_buffer_lock.unlock(state); | ||||
| 
 | ||||
| 		epoll_notify(EPOLLOUT); | ||||
| 
 | ||||
| 		return to_copy; | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue