hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/xen/pvcalls-back.c
....@@ -129,13 +129,13 @@
129129 if (masked_prod < masked_cons) {
130130 vec[0].iov_base = data->in + masked_prod;
131131 vec[0].iov_len = wanted;
132
- iov_iter_kvec(&msg.msg_iter, WRITE, vec, 1, wanted);
132
+ iov_iter_kvec(&msg.msg_iter, READ, vec, 1, wanted);
133133 } else {
134134 vec[0].iov_base = data->in + masked_prod;
135135 vec[0].iov_len = array_size - masked_prod;
136136 vec[1].iov_base = data->in;
137137 vec[1].iov_len = wanted - vec[0].iov_len;
138
- iov_iter_kvec(&msg.msg_iter, WRITE, vec, 2, wanted);
138
+ iov_iter_kvec(&msg.msg_iter, READ, vec, 2, wanted);
139139 }
140140
141141 atomic_set(&map->read, 0);
....@@ -188,13 +188,13 @@
188188 if (pvcalls_mask(prod, array_size) > pvcalls_mask(cons, array_size)) {
189189 vec[0].iov_base = data->out + pvcalls_mask(cons, array_size);
190190 vec[0].iov_len = size;
191
- iov_iter_kvec(&msg.msg_iter, READ, vec, 1, size);
191
+ iov_iter_kvec(&msg.msg_iter, WRITE, vec, 1, size);
192192 } else {
193193 vec[0].iov_base = data->out + pvcalls_mask(cons, array_size);
194194 vec[0].iov_len = array_size - pvcalls_mask(cons, array_size);
195195 vec[1].iov_base = data->out;
196196 vec[1].iov_len = size - vec[0].iov_len;
197
- iov_iter_kvec(&msg.msg_iter, READ, vec, 2, size);
197
+ iov_iter_kvec(&msg.msg_iter, WRITE, vec, 2, size);
198198 }
199199
200200 atomic_set(&map->write, 0);
....@@ -321,8 +321,10 @@
321321 void *page;
322322
323323 map = kzalloc(sizeof(*map), GFP_KERNEL);
324
- if (map == NULL)
324
+ if (map == NULL) {
325
+ sock_release(sock);
325326 return NULL;
327
+ }
326328
327329 map->fedata = fedata;
328330 map->sock = sock;
....@@ -414,10 +416,8 @@
414416 req->u.connect.ref,
415417 req->u.connect.evtchn,
416418 sock);
417
- if (!map) {
419
+ if (!map)
418420 ret = -EFAULT;
419
- sock_release(sock);
420
- }
421421
422422 out:
423423 rsp = RING_GET_RESPONSE(&fedata->ring, fedata->ring.rsp_prod_pvt++);
....@@ -558,7 +558,6 @@
558558 sock);
559559 if (!map) {
560560 ret = -EFAULT;
561
- sock_release(sock);
562561 goto out_error;
563562 }
564563