diff options
author | Nickolai Zeldovich <nickolai@csail.mit.edu> | 2013-01-07 20:28:05 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-02-05 16:26:38 -0500 |
commit | bb71b14d80bde8484ae63ee09d969c72d8615e0c (patch) | |
tree | 33a3cb8bb2419c1a46d669a331f79c66e12cf4f3 /drivers/media/pci | |
parent | 22331a5e0a493f8edfbd504bb58bd03d308ddb0c (diff) |
[media] drivers/media/pci: use memmove for overlapping regions
Change several memcpy() to memmove() in cases when the regions are
definitely overlapping; memcpy() of overlapping regions is undefined
behavior in C and can produce different results depending on the compiler,
the memcpy implementation, etc.
Cc: Andy Walls <awalls@md.metrocast.net>
Signed-off-by: Nickolai Zeldovich <nickolai@csail.mit.edu>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/pci')
-rw-r--r-- | drivers/media/pci/bt8xx/dst_ca.c | 4 | ||||
-rw-r--r-- | drivers/media/pci/cx18/cx18-vbi.c | 2 | ||||
-rw-r--r-- | drivers/media/pci/ivtv/ivtv-vbi.c | 4 |
3 files changed, 5 insertions, 5 deletions
diff --git a/drivers/media/pci/bt8xx/dst_ca.c b/drivers/media/pci/bt8xx/dst_ca.c index 7d96fab7d246..0e788fca992c 100644 --- a/drivers/media/pci/bt8xx/dst_ca.c +++ b/drivers/media/pci/bt8xx/dst_ca.c | |||
@@ -180,11 +180,11 @@ static int ca_get_app_info(struct dst_state *state) | |||
180 | put_command_and_length(&state->messages[0], CA_APP_INFO, length); | 180 | put_command_and_length(&state->messages[0], CA_APP_INFO, length); |
181 | 181 | ||
182 | // Copy application_type, application_manufacturer and manufacturer_code | 182 | // Copy application_type, application_manufacturer and manufacturer_code |
183 | memcpy(&state->messages[4], &state->messages[7], 5); | 183 | memmove(&state->messages[4], &state->messages[7], 5); |
184 | 184 | ||
185 | // Set string length and copy string | 185 | // Set string length and copy string |
186 | state->messages[9] = str_length; | 186 | state->messages[9] = str_length; |
187 | memcpy(&state->messages[10], &state->messages[12], str_length); | 187 | memmove(&state->messages[10], &state->messages[12], str_length); |
188 | 188 | ||
189 | return 0; | 189 | return 0; |
190 | } | 190 | } |
diff --git a/drivers/media/pci/cx18/cx18-vbi.c b/drivers/media/pci/cx18/cx18-vbi.c index 6d3121ff45a2..add99642f1e2 100644 --- a/drivers/media/pci/cx18/cx18-vbi.c +++ b/drivers/media/pci/cx18/cx18-vbi.c | |||
@@ -84,7 +84,7 @@ static void copy_vbi_data(struct cx18 *cx, int lines, u32 pts_stamp) | |||
84 | (the max size of the VBI data is 36 * 43 + 4 bytes). | 84 | (the max size of the VBI data is 36 * 43 + 4 bytes). |
85 | So in this case we use the magic number 'ITV0'. */ | 85 | So in this case we use the magic number 'ITV0'. */ |
86 | memcpy(dst + sd, "ITV0", 4); | 86 | memcpy(dst + sd, "ITV0", 4); |
87 | memcpy(dst + sd + 4, dst + sd + 12, line * 43); | 87 | memmove(dst + sd + 4, dst + sd + 12, line * 43); |
88 | size = 4 + ((43 * line + 3) & ~3); | 88 | size = 4 + ((43 * line + 3) & ~3); |
89 | } else { | 89 | } else { |
90 | memcpy(dst + sd, "itv0", 4); | 90 | memcpy(dst + sd, "itv0", 4); |
diff --git a/drivers/media/pci/ivtv/ivtv-vbi.c b/drivers/media/pci/ivtv/ivtv-vbi.c index 293db806d936..3c156bc70fb4 100644 --- a/drivers/media/pci/ivtv/ivtv-vbi.c +++ b/drivers/media/pci/ivtv/ivtv-vbi.c | |||
@@ -224,7 +224,7 @@ static void copy_vbi_data(struct ivtv *itv, int lines, u32 pts_stamp) | |||
224 | (the max size of the VBI data is 36 * 43 + 4 bytes). | 224 | (the max size of the VBI data is 36 * 43 + 4 bytes). |
225 | So in this case we use the magic number 'ITV0'. */ | 225 | So in this case we use the magic number 'ITV0'. */ |
226 | memcpy(dst + sd, "ITV0", 4); | 226 | memcpy(dst + sd, "ITV0", 4); |
227 | memcpy(dst + sd + 4, dst + sd + 12, line * 43); | 227 | memmove(dst + sd + 4, dst + sd + 12, line * 43); |
228 | size = 4 + ((43 * line + 3) & ~3); | 228 | size = 4 + ((43 * line + 3) & ~3); |
229 | } else { | 229 | } else { |
230 | memcpy(dst + sd, "itv0", 4); | 230 | memcpy(dst + sd, "itv0", 4); |
@@ -532,7 +532,7 @@ void ivtv_vbi_work_handler(struct ivtv *itv) | |||
532 | while (vi->cc_payload_idx) { | 532 | while (vi->cc_payload_idx) { |
533 | cc = vi->cc_payload[0]; | 533 | cc = vi->cc_payload[0]; |
534 | 534 | ||
535 | memcpy(vi->cc_payload, vi->cc_payload + 1, | 535 | memmove(vi->cc_payload, vi->cc_payload + 1, |
536 | sizeof(vi->cc_payload) - sizeof(vi->cc_payload[0])); | 536 | sizeof(vi->cc_payload) - sizeof(vi->cc_payload[0])); |
537 | vi->cc_payload_idx--; | 537 | vi->cc_payload_idx--; |
538 | if (vi->cc_payload_idx && cc.odd[0] == 0x80 && cc.odd[1] == 0x80) | 538 | if (vi->cc_payload_idx && cc.odd[0] == 0x80 && cc.odd[1] == 0x80) |