radeon: protect against buffer overflow in state atom debug code.
authorPauli Nieminen <suokkos@gmail.com>
Fri, 21 Aug 2009 18:21:16 +0000 (21:21 +0300)
committerPauli Nieminen <suokkos@gmail.com>
Fri, 21 Aug 2009 19:37:13 +0000 (22:37 +0300)
src/mesa/drivers/dri/radeon/radeon_common.c

index 4088ef303cf1bcfcce3068bd3a5d6dd0beb948da..30d24574edd4f67067e7ff5c883bc587d7312cd7 100644 (file)
@@ -904,6 +904,9 @@ static void radeon_print_state_atom_prekmm(radeonContextPtr radeon, struct radeo
        fprintf(stderr, "  emit %s %d/%d\n", state->name, dwords, state->cmd_size);
 
        if (RADEON_DEBUG & DEBUG_VERBOSE) {
+               if (dwords > state->cmd_size)
+                       dwords = state->cmd_size;
+
                for (i = 0; i < dwords;) {
                        cmd = *((drm_r300_cmd_header_t *) &state->cmd[i]);
                        reg = (cmd.packet0.reghi << 8) | cmd.packet0.reglo;
@@ -938,6 +941,8 @@ static void radeon_print_state_atom(radeonContextPtr radeon, struct radeon_state
        fprintf(stderr, "  emit %s %d/%d\n", state->name, dwords, state->cmd_size);
 
        if (RADEON_DEBUG & DEBUG_VERBOSE) {
+               if (dwords > state->cmd_size)
+                       dwords = state->cmd_size;
                for (i = 0; i < state->cmd_size;) {
                        packet0 = state->cmd[i];
                        reg = (packet0 & 0x1FFF) << 2;