conn: set unused OOB to zero length
Otherwise in the event that we're using GSO without sticky sockets, we pass garbage OOB buffers to sendmmsg, making a EINVAL, when GSO doesn't set its header. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
		
							parent
							
								
									f502ec3fad
								
							
						
					
					
						commit
						b3df23dcd4
					
				@ -65,7 +65,7 @@ func NewStdNetBind() Bind {
 | 
				
			|||||||
				msgs := make([]ipv6.Message, IdealBatchSize)
 | 
									msgs := make([]ipv6.Message, IdealBatchSize)
 | 
				
			||||||
				for i := range msgs {
 | 
									for i := range msgs {
 | 
				
			||||||
					msgs[i].Buffers = make(net.Buffers, 1)
 | 
										msgs[i].Buffers = make(net.Buffers, 1)
 | 
				
			||||||
					msgs[i].OOB = make([]byte, stickyControlSize+gsoControlSize)
 | 
										msgs[i].OOB = make([]byte, 0, stickyControlSize+gsoControlSize)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				return &msgs
 | 
									return &msgs
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
@ -200,6 +200,7 @@ again:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (s *StdNetBind) putMessages(msgs *[]ipv6.Message) {
 | 
					func (s *StdNetBind) putMessages(msgs *[]ipv6.Message) {
 | 
				
			||||||
	for i := range *msgs {
 | 
						for i := range *msgs {
 | 
				
			||||||
 | 
							(*msgs)[i].OOB = (*msgs)[i].OOB[:0]
 | 
				
			||||||
		(*msgs)[i] = ipv6.Message{Buffers: (*msgs)[i].Buffers, OOB: (*msgs)[i].OOB}
 | 
							(*msgs)[i] = ipv6.Message{Buffers: (*msgs)[i].Buffers, OOB: (*msgs)[i].OOB}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	s.msgsPool.Put(msgs)
 | 
						s.msgsPool.Put(msgs)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user