File tree Expand file tree Collapse file tree 1 file changed +13
-6
lines changed Expand file tree Collapse file tree 1 file changed +13
-6
lines changed Original file line number Diff line number Diff line change @@ -160,14 +160,16 @@ static int http_server_worker(void *arg)
160
160
};
161
161
struct http_request request ;
162
162
struct socket * socket = (struct socket * ) arg ;
163
+ int err = 0 ;
163
164
164
165
allow_signal (SIGKILL );
165
166
allow_signal (SIGTERM );
166
167
167
168
buf = kzalloc (RECV_BUFFER_SIZE , GFP_KERNEL );
168
169
if (!buf ) {
169
170
pr_err ("can't allocate memory!\n" );
170
- return -1 ;
171
+ err = - ENOMEM ;
172
+ goto out ;
171
173
}
172
174
173
175
request .socket = socket ;
@@ -176,19 +178,23 @@ static int http_server_worker(void *arg)
176
178
while (!kthread_should_stop ()) {
177
179
int ret = http_server_recv (socket , buf , RECV_BUFFER_SIZE - 1 );
178
180
if (ret <= 0 ) {
179
- if (ret )
181
+ if (ret ) {
180
182
pr_err ("recv error: %d\n" , ret );
181
- break ;
183
+ err = ret ;
184
+ }
185
+ goto out_free_buf ;
182
186
}
183
187
http_parser_execute (& parser , & setting , buf , ret );
184
188
if (request .complete && !http_should_keep_alive (& parser ))
185
- break ;
189
+ goto out_free_buf ;
186
190
memset (buf , 0 , RECV_BUFFER_SIZE );
187
191
}
192
+ out_free_buf :
193
+ kfree (buf );
194
+ out :
188
195
kernel_sock_shutdown (socket , SHUT_RDWR );
189
196
sock_release (socket );
190
- kfree (buf );
191
- return 0 ;
197
+ return err ;
192
198
}
193
199
194
200
int http_server_daemon (void * arg )
@@ -211,6 +217,7 @@ int http_server_daemon(void *arg)
211
217
worker = kthread_run (http_server_worker , socket , KBUILD_MODNAME );
212
218
if (IS_ERR (worker )) {
213
219
pr_err ("can't create more worker process\n" );
220
+ sock_release (socket );
214
221
continue ;
215
222
}
216
223
}
You can’t perform that action at this time.
0 commit comments